Linux进程管理
Linux进程管理
进程定义
分配内存, 已分配内存的地址空间
安全属性, 进程的运⾏身份和权限
进程代码, 运⾏⼀个或多个的线程
进程状态, 进程运⾏后的多种状态
- 进程是已启动的可执行程序的运行实例。
- 包含:分配内存、安全属性、进程代码、进程状态。
- 静态程序:二进制文件(如/bin/ls, /usr/sbin/sshd)。
- 动态进程:程序运行的过程,具有生命周期及运行状态。
进程生命周期
- 创建阶段:通过fork()或exec()系统调用创建进程。
- 就绪阶段:创建后放置在系统就绪队列中,等待CPU分配。
- 运行阶段:CPU分配后开始执行,此时进程状态为运行。
- 阻塞阶段:执行过程中遇到阻塞事件(如I/O操作)进入阻塞状态,不再占用CPU资源。
- 结束阶段:任务完成或被终止时,进程被系统回收,标记为僵尸进程,直到父进程调用wait()或waitpid()回收资源,最终销毁。
进程监控与管理
静态监控进程
-
- 使用`ps`命令了解进程信息: - USER: //运⾏进程的⽤户 PID: //进程 ID %CPU: //CPU 占⽤率 %MEM: //内存占⽤率 VSZ: //占⽤虚拟内存 RSS: //占⽤实际内存 驻留内存 TTY: //进程运⾏的终端 STAT: //进程状态 man ps (/STATE) R //进程运⾏ S //可中断睡眠 D //不可中断睡眠 Z //僵⼫进程 X //进程已经退出 T //进程被暂停 Ss s //进程的领导者,⽗进程 S< < //优先级较⾼的进程 SN N //优先级较低的进程 R+ + //表示是前台的进程组 vx: WingspanGo vx: WingspanGops 命令使⽤⽅法
动态监控进程
- 使用
top
命令: - h: 帮助。
- z: 彩色信息展示。
- 1: 显示所有CPU的负载。
- s: 设置刷新时间。
- b: 高亮显示处于R状态的进程。
- m: 按内存使用百分比排序。
- p: 按CPU使用百分比排序。
- r: 对排序进行反转。
- f: 自定义显示字段。
- k: 杀死指定PID进程。
- w: 保存top环境设置。
- q: 退出。
进程管理方法
信号管理进程
- 使用
kill
命令发送信号与进程通信: - 1: 挂起信号,重新配置进程。
- 2: 终止信号,与ctrl+c作用相同。
- 9: 直接杀死进程,不能被进程捕获。
- 15: 终止进程。
- 18: 继续执行被暂停的进程。
- 19: 暂停进程。
- 20: 用户停止请求,类似ctrl+z。
常⻅信号列表:
数字信号 信号别名 作⽤
1 HUP 挂起信号,往往可以让进程重新配置
2 INT 中断信号,起到结束进程的作⽤,和ctrl + c 的作⽤⼀样
3 QUIT 让进程退出,结果是进程退出
9 KILL 直接结束进程,不能被进程捕获
15 TERM 进程终⽌,这是默认信号
18 CONT 被暂停的进程将继续恢复运⾏
19 STOP 暂停进程
20 TSTP ⽤户停⽌请求,作⽤类似于ctrl + z 把进程放到后台并暂停
nohub
nohub的命令的作⽤是可以将程序以忽略挂起信号的⽅式运⾏。常⻅的⽤法是与&⼀起使⽤,将命令放到后台运
⾏,并且终端挂掉之后还会运⾏。
将程序放到后台运⾏⽤两中⽅法:
1. command & :后台运⾏,关掉终端之后程序会停⽌。
2. nohub command & :后台运⾏,关掉终端程序不会停⽌,还会继续运⾏。
20:50:17 up 95 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
wing pts/0 115.175.115.39 20:22 0.00s 0.01s 0.00s sshd: wing [priv]
//终⽌ pts/0上所有进程, 除了bash本身
[root@wing ~]# pkill -t pts/0
//终⽌pts/0上所有进程, 并且bash也结束(⽤户被强制退出)
[root@wing ~]# pkill -9 -t pts/0
//列出wing⽤户的所有进程,-l输出pid
[root@linux-wing ~]# pgrep -l -u wing
32206 sshd
32207 bash
[root@wing ~]# sleep 3000 & //运⾏程序(时),让其在后台执⾏
[root@wing ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000
[root@wing ~]# ps aux |grep sleep
[root@wing ~]# jobs //查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
[root@wing ~]# bg %2 //让作业 2 在后台运⾏
[root@wing ~]# fg %1 //将作业 1 调回到前台
[root@wing ~]# kill %1 //kill 1,终⽌ PID 为 1 的进程
[root@wing ~]# (while :; do date; sleep 2; done) & //进程在后台运⾏,但输出依然在当前终端
[root@wing ~]# (while :; do date; sleep 2; done) &>/dev/null &
注意点:
\1. 如果使⽤nohub执⾏程序未显示进⾏标准输出流重定向,则标准输出流默认重定向到当前⼯作⽬录的
nohub.out⽂件中。如果当前⼯作⽬录的nohub.out⽂件不可写,输出重定向到$HOME/nohub.out⽂件中。
如果没有⽂件能创建或者打开⽤于追加,那么command参数指定的命令不可调⽤。
\2. 如果标准错误未显示重定向,那么标准错误默认重定向到与标准输出相同的⽂件。