【问题标题】:PHP get PID of system() commandPHP 获取 system() 命令的 PID
【发布时间】:2012-05-15 01:24:59
【问题描述】:

我正在尝试从 php 网页中查找后台系统调用的 PID。如果我从 PHP 脚本中调用“ps -A”并将其打印到浏览器,它的输出与从终端调用“ps -A”的输出不同。这尤其令人沮丧,因为我可以看到 PHP 从我的终端调用的后台进程的 PID,但不能从 PHP 中看到。

换句话说,我的代码如下所示:

system("process &");
system("ps -A");

但这不会产生与从终端调用“ps -A”相同的输出。不仅如此,“进程”还显示在终端中,但不是来自 PHP 调用。

谁能向我解释为什么会这样以及如何从我的 PHP 代码中获取“进程”的 PID? (作为记录,我还尝试过使用代码的变体,包括使用 exec() 和 passthru(),到目前为止,这些都没有奏效。)

谢谢。

【问题讨论】:

标签: php unix


【解决方案1】:
echo $!

会得到最后一个命令的PID,所以..

system("process & echo $!");

【讨论】:

  • 这个建议听起来好像可行,但实际上并没有。相反,它开始打印一个错误,它无法打开它应该打开的文件(“进程”从文件中获取输入并将输出重定向到文件)。我的任何其他尝试都没有产生这个错误。
  • 如果它需要参数,你通过了吗?只需将第二个系统调用替换为“echo $!”并像以前一样保留第一个
  • 我确实通过了论据。我只是尝试单独调用它们(现在它是 exec("process &"); system ("echo $!") ),并且没有从 system(echo) 调用中打印出来。为什么会这样?
  • 为了记录,我这样做的原因是因为我需要PHP脚本等到后台进程完成后才能继续前进;我不在前台调用“进程”的原因是因为服务器挂起并且对其他请求没有响应(当它在后台时不会发生这种情况)。如果有更简单的方法来实现这一点,那么我愿意接受建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
相关资源
最近更新 更多