如何获取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)中运行。
如何获取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)中运行。
进程通常会将其用户界面(UI)单独生成,使启动器进程正常结束。
----> vlc (1488) ---> EOL
|
+--> vlc-ui (??) ---> Application
通过从命令行运行应用程序并检查提示是否几乎立即返回,可以观察到这种行为。
还要注意,当父进程退出(您的脚本)时,子进程可以选择通过监听SIGHUP信号来退出。如果您还没有这样做,您可以通过添加 sleep()
语句来延长脚本的“生存时间”以便进行调查。
$this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options);
$commandline与构造函数中一样没有改变。 - Konpakaproc_get_status()
的地方:https://github.com/symfony/symfony/blob/2.7/src/Symfony/Component/Process/Process.php#L1327 - Ja͢ck另一种可能在某些情况下有效的方法是倒序执行脚本来解析包含所需进程(例如PHP)的'ps -A',并从结果中删除PID。您无法控制结果集中的“谁是谁”,但可以控制实际运行的“谁”。