开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
进程相关
作为上一篇的补充
工作管理
- job control
- 概念
- 登入系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理
- 前提及限制
- 这些工作出发的进程必须来源于你shell的子进程[只管理自己的shell]
- 前景 你可以控制与下达指令的这个环境称为前景的工作
- 背景 可以自行运作的工作,你无法通过[ctrl+c]终止它,可使用bg/fg来呼叫该工作
- 背景中执行的进程不能等待 teminal[终端]/shell 的输入
- 管理
- 直接将指令丢到背景中执行的[&]
- 将目前的工作丢到背景中暂停[ctrl+z]
- 查看目前的背景工作状态[jobs]
- 将背景工作拿到前景来处理[fg %jobnumber]
- 让工作在背景下的状态变成运作中[bg %jobnumber]
- 管理背景当中的工作[kill -signal %jobnumber]
- -9 强制移除工作
- -15 正常移除工作
进程的查看
- ps
- 命令功能
- 将某个时间点的进程运行情况撷取下来
- 命令格式
- ps [参数|输出格式规划]
- 命令参数
- -A 都展示出来
- -a 不与终端[terminal]有关的所有进程[process]
- -u 有效使用者相关的进程
- x 通常与a这个参数一起使用,可列出较完整的信息
- 输出格式规划
- l 较长较详细的将PID 的信息列出
- j 工作的格式
- -f 做一个更完整的输出
- 命令实例
仅观察自己的bash相关进程 [llllljian@llllljian-virtual-machine ~ 11:30:44 #4]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 1582 1581 0 80 0 - 1738 wait pts/0 00:00:00 bash 0 R 1000 1694 1582 0 80 0 - 1952 - pts/0 00:00:00 ps F 进程旗标,说明这个进程的权限 4 权限为root 1 此子进程仅进行复制[fork]而没有进行实际执行[exec] S 进程状态 R[Running] 该程序正在运行中 S[Sleep] 该进程目前处于睡眠状态,但是可被唤醒 D 不可唤醒的睡眠状态,通常这支程序可能在等待I/O的情况 T 停止状态,可能是在工作控制[北京暂停]或除错状态 Z 僵尸状态,进程已经终止却无法移除到内存外 UID/PID/PPID 代表此进程被该UID所拥有/进程的PID号码/此进程的父进程PID C 代表CPU使用率,单位是百分比 PRI/NI 进程执行的优先级,PRI越小优先级越高 ADDR 该进程在内存的哪个部分,如果是running的进程一般为- SZ 该进程用掉多少内存 WCHAN 该进程是否运作中,如果是running的进程一般为- TTY 登入者的终端机位置,若为远程登录则使用动态终端接口[pts/n] TIME 该进程实际花费CPU运作的时间 CMD 造成该进程的触发程序指令
- 命令功能
- top
- 命令功能
- 动态观察进程的变化
- 命令格式
- top [-d 数字] | top [-bnp]
- 命令参数
- d 整个进程更新的秒数,预设是5秒
- b 执行几次top,一般配合数据重导向输出到文件
- n 需要进行几次的top输出结果
- p 指定某些PID进行观测
- 命令功能
进程的终止
-
进程退出的场景:
- 代码运行完毕,结果正确
- 代码运行完毕,结果不正确
- 代码异常终止
-
进程常见退出方法
- 正常终止
- 正常退出返回码为0
- 从main返回
- 调用exit
- _exit
- 异常退出:
- ctrl+C
- kill
- abort()
- 正常终止
-
查看进程退出码
- 可以用echo$?查看进程的退出码
- echo $?: 查看上一个退出码 退出码返回0~255 只用了int的8个比特位,其余位有别的用途
-
exit所做的工作
- 执行用户通过atext或on_exit定义的清理函数
- 关闭所有打开的流,所有的缓冲数据均被写入
-
调用_exit.
- 回调处理函数atexit(函数名): 在程序结束前执行.有32个上限,运行顺序与定义顺序相反
-
_exit与exit区别
- _exit()直接终止,清理缓冲区.
- exit()直接退出程序
- _exit是系统调用,exit最终也会调用_exit
进程的撤销(销毁)
- 关闭软中断
- 回收资源(如关闭文件)
- 将进程的状态置为僵尸态
- 写记账信息
- 转进程调度