终止进程的工具kill,killall和pkill

mac2022-06-30  43

  终止一个进程或终止一个正在运行的程序,一般是通过kill 、killall、pkill等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。   另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql 服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld 这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill 来杀掉。

1. killkill的应用是和ps或pgrep命令结合在一起使用的; kill的用法: kill [信号代码] 进程ID 注:信号代码可以省略;我们常用的信号代码是-9 ,表示强制终止;举例:[root@localhost ~]# ps -ef|grep nginxroot  27195 26718  0 10:27 pts/1    00:00:00 grep nginxroot  28233     1  0 Jul15 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnginx 28234 28233  0 Jul15 ?        00:00:00 nginx: worker process我们查看nginx服务器的进程;您也可以用pgrep -lnginx来查看; 我们看上面例子中的第二列,就是进程PID的列,其中28233是nginx服务器的父进程,从28233-28234的进程都是它28233的子进程;如果我们杀掉父进程28233的话,其下的子进程也会跟着死掉;对于僵尸进程,可以用kill -9 来强制终止退出;比如一个程序已经彻底死掉,如果kill不加信号强度是没有办法退出,最好的办法就是加信号强度-9 ,后面要接杀父进程;比如;[root@localhost ~]# pgrep -l nginx28233 nginx28234 nginx[root@localhost ~]# kill -9 28233 

 

kill -9, 这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。 如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。  2. killall killall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。用法:killall 正在运行的程序名killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;举例: [root@localhost beinan]# pgrep -l GameServer 30529 GameServer [root@localhost beinan]# killall GameServer 3. pkill pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用pkill来杀掉。 应用方法: #pkill 正在运行的程序名 举例:[root@localhost beinan]# pgrep -l GameServer 30529 GameServer[root@localhost beinan]# pkill GameServer 

 

转载于:https://www.cnblogs.com/mags/p/6899044.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)