您的位置:首页 > 运维架构 > Linux

Unix & Linux笔记(17)

2016-05-29 19:07 232 查看

第26章 进程和作业控制

26.1 内核管理进程的方式

进程=加载到内存中准备运行的程序+程序所需的数据+跟踪管理程序状态所需的各种信息

进程ID
process id
PID


进程表
process table


调度器
scheduler


26.2 进程分叉到死亡

系统调用(
200~300


几个和进程、I/O有关的重要系统调用

进程控制-
fork
创建一个当前进程的副本,几乎完全一样
wait
强制该进程暂停直至另一进程结束
exec
改变进程运行的程序
exit
(退出)终止进程
kill
-
文件I/O
open
read
write
close
echo $$ 显示当前shell的PID


父进程
parent process
parent


子进程
child process
child


僵进程
zombie


死亡
die/terminate


26.3 孤儿进程和废弃进程

#1
进程
init
进程 收养

26.4 区分父进程和子进程

子进程返回值
0
婴儿状态

父进程返回值 新建进程的
PID
方便收尸

26.5 第一个进程:init

#0
空闲进程(
idle process
) 第一代创世神(被否认存在)

#1
初始化进程(
init process


26.6 前台进程与后台进程

后台进程:命令末尾键入
&


前台进程:
fg


26.7 创建延迟:
sleep

sleep interval [s|m|h|d]


26.8 作业控制(一个
shell
特性)

异步进程
asynchronous process


1. 默认标准输入与
/dev/null
相连

2. 不响应
intr
quit
信号

作业控制的本质特性就是将输入每条输入的命令视为一个作业,该作业由一个唯一的作业号标志。

8个作业控制命令

命令作用
jobs
显示作业列表
ps
显示进程列表
fg
将作业移至前台
bg
将作业移至后台
suspend
挂起当前
shell
^Z
挂起当前作业
kill
向作业发送信号;默认终止作业
变量方面

echo $$
显示当前shell的PID

echo $!
显示上一条移至后台命令的PID

进程作业
进程是正在执行或准备执行的程序解释整个命令行所需的全部进程
内核控制
shell
控制
进程表作业表

26.9 在后台运行作业

[1] 4003
作业号#1 进程号


完成后通知:

set -o notify


26.10 挂起作业

作业的三种状态:

前台运行;后台运行; 挂起;

^Z
susp
进程挂起

fg
移至前台

26.11 挂起
shell
:
suspend

26.12 作业控制与多窗口

26.13 显示作业列表:
jobs

26.14 将作业移至前台:
fg

命令作用
fg
%
fg %
fg %+
fg %%
当前作业
fg %-
前一个作业
fg %n
作业
#n
fg %name
-
fg %?name
-

26.15 将作业移至后台:
bg

26.16 学习使用
ps
程序

ps
process status


UNIX选项 (POSIX选项) BSD选项 GNU选项

26.17 ps程序:基本技能

ps –e (everything)
ps –f (full output)


26.08 ps程序:选择选项(
ps –ef

26.19 ps程序:状态(
ps –ly

S
列:

D
不可中断睡眠(通常是等待
I/O


R
正在运行或可运行

S
可中断(等待事件结束)

T
挂起

Z
僵进程

每当使用
ps
时,所查看到的是一瞬间的快照。

26.20 监视系统进程:
top
prstat

top [-d delay] [-n count] [-p pid]


26.21 显示进程树:
pstree
ptree

大多数第三代进程都是守护进程,主要任务就是等待。

pstree [ -aAcGnpu ] [ pid ] [ userid ]

pstree -np
-n Sort processes with the same ancestor by PID instead of by name. (Numeric sort.)
-p Show PIDs.


26.22 思考Unix如何组织进程和文件:
fuser

fuser

列举所有正在使用一个给定的文件的进程。

26.23 杀死进程:
kill

kill
终止进程 向进程发送信号

kill [ -9 ] pid… | jobid…


kill -9

杀死进程,并不允许进程释放正在使用的资源,可能导致孤儿进程。

26.24 向进程发送信号:
kill

kill [ -signal ] pid… | jobid…


进程间通信
interprocesss communication
IPC


kill
程序的目的就是支持一种不同类型的
IPC
,具体而言,就是发送一个非常简单的消息,这种消息称为信号。信号不过是发送给进程的一个数字,从而让进程知道发送了哪些事情。进程会识别信号(称为捕获),从而决定执行什么动作。

编号缩写描述
1
HUP
中止:注销或终端失去连接时发送给进程
2
INT
中断:当按下
^C
键时发送
9
KILL
杀死:立即终止,进程不能捕获
15
TERM
终止:请求终止,进程不能捕获
18
CONT
继续:恢复挂起的进程,由
fg
bg
发送
19
STOP
停止(挂起):当按下
^Z
键时发送

26.25 设置进程的优先级:
nice

调度器的任务就是在各个进程之间动态地分配资源。(优先级)

nice [ -n adjustment ] command


优先级降低

-20—————————–> 19

例:
nice -n -20 specialprogram &


26.26 改变现有进程的优先级:
renice

^Z
(挂起)—>
bg
—>
ps
(查看进程ID)—>
renice niceness -p

processed


26.27 守护进程

服务程序

TTY
列中的?字符表示该进程不受终端控制。守护进程很多以字母
d
结尾。

查看守护进程:

ps -t - | less 或 ps -e | grep '?' | less


大多数守护进程在启动过程的最后一部分自动创建,(有些由
#1
创建,另一些则不然),父进程死后都由
#1
收养。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: