【问题标题】:How to get list of running php scripts using PHP exec()?如何使用 PHP exec() 获取正在运行的 php 脚本列表?
【发布时间】:2011-08-24 21:32:22
【问题描述】:

我需要知道并终止是否有任何进程在运行指定的 PHP 脚本。是否可以使用 exec() 和 php 脚本获取运行 sample.php 的进程列表。

【问题讨论】:

    标签: php linux unix exec


    【解决方案1】:
    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
    • 父进程id、进程ID、cpu使用率、内存使用率等...查看man ps了解详情。
    • 不幸的是,我收到了Error, do this: mount -t proc proc /proc
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        这帮助我通过 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");
        

        【讨论】:

          猜你喜欢
          • 2015-04-03
          • 1970-01-01
          • 2015-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-08
          • 2016-08-17
          • 2014-12-07
          相关资源
          最近更新 更多