soarli

Linux查看系统进程、kill命令杀死进程
查看进程显示当前系统进程的列表 :ps ax下面是ps命令解释:使用权限:所有使用者 使用方式:ps [optio...
扫描右侧二维码阅读全文
30
2020/01

Linux查看系统进程、kill命令杀死进程

查看进程

显示当前系统进程的列表 :

ps ax

下面是ps命令解释:

使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间行程 (process) 的动态
参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程

常用参数:

-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行

例:

ps aux|grep nginx
ps -ef | grep vim

如果输出过长,管道命令less分页查看

ps ax | less

当然也可以使用

ps -A 

只列出所有进程,查看简略信息。

查看具体进程是否在运行,辅助grep命令 

ps ax|grep nginx

输出 

soarli@soarli-virtual-machine:~$ ps ax | grep nginx
   946 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
   947 ?        S      0:00 nginx: worker process
   948 ?        S      0:00 nginx: worker process
110893 pts/4    S+     0:00 grep --color=auto nginx

杀死进程

最安全的方法是单纯使用kill命令,不加修饰符,不带标志。

首先使用ps-ef命令确定要杀死进程的PID,然后输入以下命令:

kill pid

注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
 

确定要杀死进程的PID或PPID

ps -ef| grep httpd

以优雅的方式结束进程

kill -l PID

-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
 

TERM信号

给父进程发送一个TERM信号,试图杀死它和它的子进程。

kill-TERM PPID

killall命令

killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。

killall httpd

停止和重启进程

有时候只想简单的停止和重启进程。如下:

kill -HUP PID

该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。

绝杀

kill -9 PID
或:
kill -s SIGKILL (统一)

这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。

当使用此命令时,一定要通过ps-ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。

如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。

补充

查看进程时ps aux和ps -ef的区别:


ps -ef 是用标准的格式显示进程的:

其中各列的内容意思如下
UID    //用户ID、但输出的是用户名 
PID    //进程的ID 
PPID    //父进程ID 
C      //进程占用CPU的百分比 
STIME  //进程启动到现在的时间 
TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD    //命令的名称和参数

ps aux 是用BSD的格式来显示:

同ps -ef 不同的有列有
USER      //用户名 
%CPU      //进程占用的CPU百分比 
%MEM      //占用内存的百分比 
VSZ      //该进程使用的虚拟內存量(KB) 
RSS      //该进程占用的固定內存量(KB)(驻留中页的数量) 
STAT      //进程的状态 
START    //该进程被触发启动时间 
TIME      //该进程实际使用CPU运行的时间

其中STAT状态位常见的状态字符有
D      //无法中断的休眠状态(通常 IO 的进程); 
R      //正在运行可中在队列中可过行的; 
S      //处于休眠状态; 
T      //停止或被追踪; 
W      //进入内存交换 (从内核2.6开始无效); 
X      //死掉的进程 (基本很少见); 
Z      //僵尸进程; 
<      //优先级高的进程 
N      //优先级较低的进程 
L      //有些页被锁进内存; 
s      //进程的领导者(在它之下有子进程); 
l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
+      //位于后台的进程组;

参考资料:

https://blog.csdn.net/marujunyy/article/details/8466264

https://man.linuxde.net/kill

https://www.cnblogs.com/FTDtt/p/4884914.html

https://www.cnblogs.com/mydriverc/p/8303242.html

https://blog.csdn.net/seulzz/article/details/100520966

https://blog.csdn.net/rangf/article/details/6334844

最后修改:2021 年 12 月 01 日 05 : 03 PM

发表评论