2011-08-24 85 views

回答

16
exec("ps auxwww|grep sample.php|grep -v grep", $output); 

只有在PHP运行在CGI模式下时,这才会起作用。如果它作为SAPI类型的东西运行,那么在进程列表中就不会看到“sample.php”,只是“httpd”。

+0

谢谢你的工作,但这里显示的数字是什么? '1025 19622 0.0 0.0 5336 1308? S 02:15 0:00 wget -q http:// www.example.com/sample.php' –

+0

父进程ID,进程ID,CPU使用情况,内存使用情况等...查看'man ps'获取详细信息。 –

+0

Thanx @Marc for your answer –

0

没有。因为PHP是通过apache/nginx运行的。在命令行访问的情况下,proccess命名为PHP,而不是脚本的实际名称。

0

这取决于许多因素,包括操作系统,PHP版本等,但您可以尝试使用信号来获取脚本以提供其名称,然后在匹配时终止。或者,让脚本注册其pid,然后与正在运行的进程进行比较。

http://stuporglue.org/handling-signals-in-php/

0

帮我通过一个URL参数杀流氓进程。我想我会为讨论做出贡献,以防其他人仍在寻找答案。

load yikes.php。确定进程ID(它应该是您在数组的每个索引中找到的第一个整数)。将它复制并粘贴到url中,作为?pid = XXXXX。它消失了。

//http://website.com/yikes.php?pid=668 
$pid = $_GET['pid']; 
exec("ps auxwww|grep name-of-file.php|grep -v grep", $output); 
echo '<pre>'; 
print_r($output); 
echo '</pre>'; 
// 
exec("kill $pid");