如何获取由Symfony启动的进程PID?

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)中运行。


你读过这个吗?http://php-and-symfony.matthiasnoback.nl/2014/03/test-symfony2-commands-using-the-process-component-and-asynchronous-assertions/ - Pedro Lobito
我不想创建文件。我需要在进程启动时直接获取PID。 - Konpaka
2个回答

2

进程分叉

进程通常会将其用户界面(UI)单独生成,使启动器进程正常结束。

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

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

挂起信号

还要注意,当父进程退出(您的脚本)时,子进程可以选择通过监听SIGHUP信号来退出。如果您还没有这样做,您可以通过添加 sleep() 语句来延长脚本的“生存时间”以便进行调查。


我会尝试使用另一个应用程序。 更新:我运行了 ezstream -c /abs_path_to_cfg.xml 结果相同。 - Konpaka
你正在使用的Symfony组件应该已经封装了它。 - Ja͢ck
不是的。我只是在观察源代码: $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options); $commandline与构造函数中一样没有改变。 - Konpaka
@Konpaka 这里是调用 proc_get_status() 的地方:https://github.com/symfony/symfony/blob/2.7/src/Symfony/Component/Process/Process.php#L1327 - Ja͢ck
我忘记检查getPid()了,我的错。谢谢你的回复,我明天会试着看一下。 - Konpaka

0

另一种可能在某些情况下有效的方法是倒序执行脚本来解析包含所需进程(例如PHP)的'ps -A',并从结果中删除PID。您无法控制结果集中的“谁是谁”,但可以控制实际运行的“谁”。


当然,我知道这个。谢谢。 - Konpaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接