【发布时间】:2011-08-24 21:32:22
【问题描述】:
我需要知道并终止是否有任何进程在运行指定的 PHP 脚本。是否可以使用 exec() 和 php 脚本获取运行 sample.php 的进程列表。
【问题讨论】:
我需要知道并终止是否有任何进程在运行指定的 PHP 脚本。是否可以使用 exec() 和 php 脚本获取运行 sample.php 的进程列表。
【问题讨论】:
exec("ps auxwww|grep sample.php|grep -v grep", $output);
这只有在 PHP 在 CGI 模式下运行时才有效。如果它作为 SAPI 类型运行,您将永远不会在进程列表中看到“sample.php”,而只会看到“httpd”。
【讨论】:
1025 19622 0.0 0.0 5336 1308 ? S 02:15 0:00 wget -q http://www.example.com/sample.php
man ps了解详情。
Error, do this: mount -t proc proc /proc。
没有。因为 PHP 是通过 apache/nginx 运行的。在命令行访问的情况下,proccess 被命名为 PHP,而不是脚本的实际名称。
【讨论】:
这取决于很多因素,包括操作系统、PHP 版本等,但您可以尝试使用信号来获取脚本来为您命名,然后在匹配时终止。或者,让脚本注册它的 pid,然后与正在运行的进程进行比较。
【讨论】:
这帮助我通过 url 参数杀死流氓进程。我想我会为讨论做出贡献,以防其他人仍在四处寻找答案。
加载 yikes.php。识别进程ID(它应该是您在数组的每个索引中找到的第一个整数)。将其作为 ?pid=XXXXX 复制并粘贴到 URL 中。它消失了。
//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");
【讨论】: