您需要pid在后台运行 2 个或更多脚本。然后pid他们将被关闭,kill $pid但问题是如何让他们知道进程名称?例如,我system('ps aux | grep php');通常用来获取所有进程,我看到如下内容:
username 676878 100 0.0 296980 14372 ? R 13:04 3:27 /opt/cpanel/ea-php56/root/usr/bin/php/home/username/Business_Logic/testProc.php
username 676943 99.8 0.0 296980 14372 ? R 13:04 3:25 /opt/cpanel/ea-php56/root/usr/bin/php/home/username/Business_Logic/testProc.php
username 693011 1.0 0.0 461388 15888 ? Ss 13:08 0:00 lsphp
username 693146 0.0 0.0 462164 6768 ? Ss 13:08 0:00 lsphp:/home/username/public_html/index.php
username 693147 0.0 0.0 12228 1264 ? S 13:08 0:00 sh -c ps aux | grep php
username 693149 0.0 0.0 8492 696 ? S 13:08 0:00 grep php
我需要杀死的前两个进程。但是,如果您进一步输入:
$proc_str = exec('ps aux | grep /home/username/Business_Logic/testProc');
我将在答案中看到一个完全不同的答案pid:
username 729968 0.0 0.0 8492 704 ? S 13:13 0:00 grep /home/username/Business_Logic/testProc
它应该在$proc_str pid正确的过程中得分并杀死它,但这并没有产生预期的效果 - 过程仍然有效。
UPD 需要完成的过程我这样运行了几次:
system('php /home/usernam/Business_Logic/testProc.php > /dev/null 2>&1 &');
下一个杀:
exec('Killall testProc.php'); // ||
exec('Killall testProc'); // ||
exec('Killall /home/username/Business_Logic/testProc.php');
结果,进程继续挂起。只有exec('kill 568454');帮助。
UPD_2
exec('pkill -f proc_name');
这个命令有帮助,一次杀死所有进程proc_name.php。
我认为是时候让你了解一下 pkill,它可以通过名称杀死一个进程,killall,它可以通过名称杀死许多进程,或者 pgrep,它实际上通过它的名称返回一个进程的 pid,或者 pidof(它查找直接点名)。在 ubuntu 中,这些命令通常在 procps 包中,在 gent - sys-process/procps
最后,以下命令帮助了我:
使用脚本的几个运行实例
proc_name.php,它会立即结束所有内容。