3

如何获取 Symfony 启动的进程的 PID?下面的代码

$process = new \Symfony\Component\Process\Process('vlc');
$process->start();
return $process->getPid();

返回 PID 1488。但是系统中没有具有相同 PID 的进程(没有 vlc,没有 php)。

编辑

呈现的代码在 app/console (Symfony\Component\Console\Command\Command) 中运行

4

2 回答 2

2

进程分叉

进程不太可能单独生成它们的 UI 并让启动进程正常结束,即

----> vlc (1488) ---> EOL
       |
       +--> vlc-ui (??) ---> Application

通过从命令行运行应用程序并检查提示是否几乎立即返回,可以观察到此行为。

挂机信号

另请注意,当父进程退出(您的脚本)时,子进程可能会通过侦听 SIGHUP 信号来选择退出。如果您还没有这样做,您可以通过sleep()在调查时添加一条语句来让您的脚本“存活”更长的时间。

于 2015-04-18T04:12:03.177 回答
0

在某些情况下可能起作用的另一种方法是像脚本一样反向执行它,以 grep 解析包含所需进程(例如 PHP)的“ps -A”并从结果中提取 PID。您无法控制结果集上的“谁是谁”,但可以控制实际运行的“谁”。

于 2015-04-18T05:10:43.840 回答