首页 / PHP / PHP调用时无法终止进程组
PHP调用时无法终止进程组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP调用时无法终止进程组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2156字,纯文字阅读大概需要4分钟。
内容图文
![PHP调用时无法终止进程组](/upload/InfoBanner/zyjiaocheng/956/3e33fba607334094940aea14b7bc6a62.jpg)
我有一个产生两个僵尸的脚本.我可以通过kill – – < parent-pid>来杀死该组,但是当由PHP解释器调用时,虽然手动杀死每个进程,但这将无效.
脚本是
#!/bin/bash
sleep 1d&
sleep 1d
并且PHP文件只是调用它:
<?php
exec("./spawn")
?>
从shell直接:
$./spawn&
[1] 19871
$pstree -p 19871
spawn(19871)─┬─sleep(19872)
└─sleep(19873)
$kill -- -19871
$pstree -p 19871
[1]+ Terminated ./spawn
……并通过PHP:
$php -f zomby.php &
[1] 19935
$pstree -p 19935
php(19935)───sh(19936)───spawn(19937)─┬─sleep(19938)
└─sleep(19939)
$kill -- -19937
bash: kill: (-19937) - No matching process found
$kill -- -19936
bash: kill: (-19936) - No matching process found
$kill 19939 19938 19937
$Terminated
[1]+ Fertig php -f zomby.php
只有杀死PHP父进程才会起作用:
$php -f zomby.php &
[1] 20021
$pstree -p 20021
php(20021)───sh(20022)───spawn(20023)─┬─sleep(20024)
└─sleep(20025)
$kill -- -20021
$pstree -p 20021
[1]+ Terminated php -f zomby.php
有什么想法吗?
解决方法:
当给定PID <1时,kill命令. -1,将其视为进程组ID(PGID),而不是进程ID.这在info kill中有记录:
‘PID < -1’
The process group whose identifier is ?PID.
如果我们再举一个例子:
$pstree -p 19935
php(19935)───sh(19936)───spawn(19937)─┬─sleep(19938)
└─sleep(19939)
PGID是进程树最顶层父进程的PID,在本例中为19935.但是,您尝试使用ID 19937和19936终止属于进程组的进程,这两个进程实际上都不是进程组ID. PGID是19935.
你可以用ps更清楚地看到这一点.如果我在我的系统上运行相同的命令:
$php -f ./zombie.php &
[2] 12882
$ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]2882'
PID PPID PGID COMMAND
12882 1133 12882 php -f ./zombie.php
12883 12882 12882 /bin/bash ./spawn
12884 12883 12882 sleep 1d
12885 12883 12882 sleep 1d
在上面的例子中,该组的PGID是12882,所以如果我想要杀死组中的所有内容,我需要使用它.
当您直接从shell运行命令时,最顶层的父进程是shell脚本的PID,因此您可以通过运行kill – -PID来终止其树中的所有进程:
$./spawn &
[3] 14213
terdon@tpad foo $ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]4213'
PID PPID PGID COMMAND
14213 1133 14213 /bin/bash ./spawn
14214 14213 14213 sleep 1d
14215 14213 14213 sleep 1d
但那是因为shell脚本的PID是组的PGID.
内容总结
以上是互联网集市为您收集整理的PHP调用时无法终止进程组全部内容,希望文章能够帮你解决PHP调用时无法终止进程组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。