Linux进程状态
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中,受阻,在等待某个条件的形成或等待接受到信号)
- 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
- 僵死(进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps相关指令
ps命令(Process Status)是最基本同时也是非常强大的进程查看命令。
- ps a 显示现行终端机下的所有程序,包括其他用户的程序。
- ps -A 显示所有程序。
- ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
- ps -e 此参数的效果和指定"A"参数相同。
- ps e 列出程序时,显示每个程序所使用的环境变量。
- ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
- ps -H 显示树状结构,表示程序间的相互关系。
- ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
- ps s 采用程序信号的格式显示程序状况。
- ps S 列出程序时,包括已中断的子程序资料。
- ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
- ps u 以用户为主的格式来显示程序状况。
- ps x 显示所有程序,不以终端机来区分。
ps aux | more 指令
这个指令可以显示进程详细的状态。
参数解释:
- USER:进程的所有者。
- PID:进程的ID。
- PPID:父进程。
- %CPU:进程占用的CPU百分比。
- %MEM:进程占用的内存百分比。
- NI:进程的NICE值,数值越大,表示占用的CPU时间越少。
- VSZ:该进程使用的虚拟内存量(KB)。
- RSS:该进程占用的固定内存量(KB)。
- TTY:该进程在哪个终端上运行,若与终端无关,则显示?。若为pts/0等,则表示由网络连接主机进程。
- WCHAN:查看当前进程是否在运行,若为-表示正在运行。
- START:该进程被触发启动时间。
- TIME:该进程实际使用CPU运行的时间。
- COMMAND:命令的名称和参数。
- STAT状态位常见的状态字符:
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);+ 位于后台的进程组;
ps aux | grep xxx命令
如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
例如我想要查看Python 的所有进程,可以在终端输入如下命令:
ps aux | grep python
便可以把Python相关的进程全部都打印到终端供我们查看。相关参数和之前的ps aux | more一致。
进程结束命令
我们可以使用kill命令来结束进程。
如下面的指令所示:
kill PID //杀掉进程
kill -9 PID //强制杀死进程