Unix & Linux笔记(17)

第26章 进程和作业控制

26.1 内核管理进程的方式

=++

进程ID process idPID
进程表 process table
调度器 scheduler

26.2 进程分叉到死亡

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

进程控制 -
fork 创建一个当前进程的副本,几乎完全一样
wait 强制该进程暂停直至另一进程结束
exec 改变进程运行的程序
exit (退出)终止进程
kill -


文件I/O
open
read
write
close
echo $$ 显示当前shell的PID

父进程 parent processparent
子进程 child processchild
僵进程 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. 不响应intrquit信号

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

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程序

psprocess 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 监视系统进程:topprstat

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

26.21 显示进程树:pstreeptree

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

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 继续:恢复挂起的进程,由fgbg发送
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收养。

你可能感兴趣的:(Unix & Linux笔记(17))