【问题标题】:How to get process PID started by Symfony?如何让 Symfony 启动进程 PID?
【发布时间】:2015-06-25 02:17:27
【问题描述】:

如何获取 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) 中运行

【问题讨论】:

标签: php linux symfony pid symfony-process


【解决方案1】:

进程分叉

进程单独生成其 UI 并让启动进程正常结束并非不可能,即

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

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

挂机信号

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

【讨论】:

  • 我将尝试使用另一个应用程序。 UPD:我运行了 ezstream -c /abs_path_to_cfg.xml 相同的结果。
  • 你使用的 Symfony 组件应该已经封装了它。
  • 不。我只是在看消息来源:$this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options); $commandline 与构造函数没有变化。
  • @Konpaka Thisproc_get_status() 被调用的地方...
  • 我忘了检查 getPid(),我的错。谢谢回复,我明天试试看。
【解决方案2】:

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

【讨论】:

  • 我当然知道。谢谢。
猜你喜欢
  • 2014-06-25
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2010-12-30
  • 2011-07-14
  • 2013-02-07
相关资源
最近更新 更多