十、进程
- ps:显示当前所有进程的情况
- top:实时显示当前进程所有任务的资源占用情况
- jobs:列出所有活动作业的状态信息
- bg:设置在后台中运行作业
- fg:设置在前台中运行作业
- kill:发送信号给某个进程
- killall:杀死指定名字的进程
- shutdown:关机或者重启系统
进程如何工作
系统启动时,内核先把他的一些程序初始化为进程,然后运行一个称为init的程序。init程序将依次运行一系列称为脚本初始化的shell脚本(/etc目录下),这些脚本将启动所有的系统服务。其中有很多服务是通过守护程序(daemon program)实现的。而后台程序只是呆在后台做他们自己的事情。一个程序的运行可以触发其他程序的运行,进程中这种情况被表述为父进程创建子进程。内核会保存每个进程的信息以确保任务有序进行,每个进程会被分配一个叫做进程ID的号码。
1、使用ps命令查看进程信息
默认情况下ps只是输出和当前终端会话相关的进程,ps x 命令显示所有进程,pa aux命令将输出更多信息
?代表没有终端控制
STAT代表进程的当前状态
R | 运行状态。进程正在运行或者准备运行 |
S | 睡眠状态。进程不再运行,等待某事件的发生 |
D | 不可中断的睡眠状态。比如等待I/O操作 |
T | 暂停状态 |
Z | 无效或者“僵尸”进程 |
< | 高优先级进程 |
N | 低优先级进程 |
2、使用top命令动态查看进程信息
控制进程
1、中断进程: Ctrl-C将会中断一个程序
2、使进程在后台执行: xlogo & 在命令后面加上&符号来实现,会返回作业编号以及PID
3、使进程返回到前台:fg %1 在后台执行的程序不会受到任何键盘输入的影响,包括Ctrl-C,使用fg命令后面加上%和作业编号来实现这个功能
4、停止(暂停)进程:Ctrl-Z
信号
kill命令精确来说不是杀死进程,而是给进程发送信号,信号是操作系统与程序之间通信的多种方式之一,在使用Ctrl-C和Ctrl-Z就是发送信号。
1、使用kill命令发送信号到进程
kill [-signal] PID...
如果命令没有明确指出信号,那么默认发送TERM信号(终止,Treminate),常见信号如下
信号编号 | 信号名 | 含义 |
1 | HUP | 挂起信号,该信号的效果通过关闭终端会话的方式来表现,当一个后台程序进程接收到这个信号时,他将重启,并且重新读取他的配置文件。 |
2 | INT | 中断信号,Ctrl-C效果相同 |
9 | KILL | 杀死信号 |
15 | TERM | 终止信号,kill命令默认发送的信号类型 |
18 | CONT | 继续运行信号,用于恢复接受了stop信号的进程 |
19 | STOP | 暂停信号 |
2、使用killall发送信号给多个进程
killall [-u user] [-signal] name...
可以给指定程序以及指定用户名的多个程序发送信号