检查进程是否正在使用PHP运行

时间:2015-02-23 01:54:44

标签: php jquery

我试图通过在exec()中使用pgrep来确定进程是否在PHP中运行。

checkstatus.php:

<?php
echo exec("pgrep myProgram");
?>

health.js:

$(document).ready(function() {
  $.post("checkstatus.php", {},
    function(data) {
      alert(data);
    }
  );
});

从命令行,这可以工作: php checkstatus.php

哪个会重新启动PID

上面的代码应该可以工作,但是返回null。是否存在我忽略的错误/更好的方法?

5 个答案:

答案 0 :(得分:0)

试试这个(未经测试):

$(document).ready(function() {);
$.post( "checkstatus.php", function( data ) {
alert( "Data Loaded: " + data );
});
});

并尝试shell_exec checkstatus.php:

<?php
echo shell_exec("pgrep myProgram");
?>

并确保对php和文件进行以下设置。

    **safe mode off
    full read/write/exec permissions
    displaying all errors
    no disabled functions**

答案 1 :(得分:0)

从您对Class的响应中,checkstatus.php如果直接执行则返回null。命令行中pgrep myProgram的输出是什么?

以下代码在Windows 7上运行的WAMP上正常运行:

<强> health.html

<!doctype html>
<head>
<title></title>
<script src="jquery-2.1.1.min.js"></script>
<style>
#output {
    background-color: #ddd;
    margin-top: 5px;
}
</style>
</head>
<body>
<button id="click">Click Me</button>
<div id="output"></div>
</body>
<script>
$("#click").click(function()
{
    console.log('clicked');
    $.post("health.php",
        function(data) {
          $('#output').html('From health.php: ' + data);
        }
    );
});
</script>
</html>

<强> health.php

<?php

//system('ver');
echo exec('ver');

?>

答案 2 :(得分:0)

这项工作适合我。

checkstatus.php:

<?php
echo exec("pgrep dropbox");

health.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- javascript/jQuery -->
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

</head>
<body>
<script>
    $(document).ready(function () {
        $.post("checkstatus.php", {},
            function (data) {
                alert(data);
            }
        );
    });
</script>
</body>
</html>

截图: enter image description here

答案 3 :(得分:0)

我认为您可能遇到的问题可能是 linux权限,更多的是Linux问题而不是PHP?

PHP在一个单独的用户帐户下运行。 (尝试使用 whoami 命令)在我的系统上,用户名是 apache ,而不是PHP和apache程序的普通用户帐户。试试这个:

<?php
    var_dump( shell_exec( 'whoami' ) );

我使用了var_dump而不是echo,因此我们可以看到可能在需要时返回的任何非标量数据类型(See here)。

现在......您最有可能的问题是,从非root帐户运行流程列表时,它只会为您提供与您的帐户关联的流程列表。我在为工作创建系统监视应用程序时遇到了这个问题。如果你从root做一个进程列表,或者如果你使用sudo,理论上你应该完成每个进程。

然而,解决方案是来sudo您的网络服务器帐户 - 这将是一个主要的安全漏洞。解决方案是找到另一种方法来做你想做的事。对我来说,我能够创建一个由cron作业每分钟触发的bash脚本,该脚本将获取我需要的所有信息并将其以JSON格式保存到Web服务器可访问的文件中。

你究竟想要实现什么目标?

修改 我注意到另一个答案是你在终端从PHP调用脚本时得到了结果。这是因为您将使用与用户帐户相同的权限运行PHP,这意味着PHP正在运行pgrep命令作为您的用户帐户。您应该看到与手动运行它的PHP完全相同的结果。

答案 4 :(得分:0)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以是用户:apache / www-data或root)。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('pgrep myProgram');

$ return1包含一个返回bash的字符串。