> Linux教程 > 系统运维 >

根据文件名来杀进程 kill

在linux里,一个程序可能出现多个进程,比如一个程序被循环调用,一个crontab计划还未结束另一个又开启了,程序出现bug等等。如果是已经注册为服务的程序,或者有自带停止功能,结束很简单,直接stop就可以了。比如停止所有的nginx进程:

/etc/init.d/nginx stop

nginx -s stop

但如果程序自身没有stop功能,那就只能残忍的把它杀掉了。比如,有50个php进程:

[root@etang ~] ps aux|grep php
root     12905  0.3  0.5 204524 20684 ?        S    08:59   0:43 php push_fail.php
root     14841  0.3  0.5 204508 20784 ?        S    04:59   1:21 php push_fail.php
root     16239  0.3  0.2 250808 11244 ?        S    Aug03  26:15 php workerJob.php
root     16241  0.3  0.2 250496 11188 ?        S    Aug03  26:48 php workerJob.php
root     16244  0.3  0.2 250496 11192 ?        S    Aug03  25:06 php workerJob.php
root     16248  0.3  0.2 250496 11172 ?        S    Aug03  26:32 php workerJob.php
root     16251  0.4  0.2 250496 11172 ?        S    Aug03  30:29 php workerJob.php
root     16252  0.3  0.2 250496 11168 ?        S    Aug03  26:53 php workerJob.php
root     16256  0.3  0.2 250496 11176 ?        S    Aug03  25:38 php workerJob.php
root     16257  0.3  0.2 250496 11180 ?        S    Aug03  25:11 php workerJob.php
root     16263  0.4  0.2 250496 11188 ?        S    Aug03  31:34 php workerJob.php
root     16266  0.4  0.2 250496 11188 ?        S    Aug03  30:11 php workerJob.php
root     16268  0.3  0.2 250496 11176 ?        S    Aug03  26:31 php workerJob.php
......

有三种方法可以杀掉这些php进程。
第一种:

kill 12905
kill 14841
kill 16239
......

根据程序的PID一个个的kill。这种kill方法最常用,但如果要结束50个进程,就得手动kill 50次,费时费力。
第二种:

killall php

一次杀掉所有php进程。简单省事。但如果是只想kill掉指定的进程,保留有用的进程,那这种宁可错杀一千,不可放过一个的做法就不适合了。
第三种:

kill -9 `ps -aef | grep 'workerJob.php' | grep -v grep | awk '{print $2}'`

kill掉所有运行workerJob.php这个文件的php进程。不会影响其他的正常的进程。

(责任编辑:IT)