在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) |