从PHP停止屏幕命令不会停止实际进程

时间:2018-01-02 21:11:21

标签: php debian daemon freebsd gnu-screen

下面的方案就像Debian下我的vagrantbox中的一个魅力,但在FreeBSD下的生产中不能正常工作。

1)我通过控制台执行我的symfony命令:php my:command start。它从内部运行my:daemon命令,包含在屏幕中,如下所示:cd ~/path && screen -dmS mydaemon php bin/console my:daemon,它运行良好。

2)当该命令启动时,它会在screen -dmS myworkerX php bin/console my:worker --id=X这样的屏幕上执行另外3个命令,这也很有用。

为了您的理解,它在流程树中的外观如何:

 - screen -dmS mydaemon php bin/console my:daemon
   - php bin/console my:daemon
     - screen -dmS myworker1 php bin/console my:worker --id=1
         - php bin/console my:worker --id=1
     - screen -dmS myworker2 php bin/console my:worker --id=2
         - php bin/console my:worker --id=2
     - screen -dmS myworker3 php bin/console my:worker --id=3
         - php bin/console my:worker --id=3

屏幕命令的结果如下所示:

$ screen -list
There are screens on:
    16362.mydaemon  (Detached)
    16372.myworker1 (Detached)
    16378.myworker2 (Detached)
    16384.myworker3 (Detached)

此时,所有在freebsd和debian上都可以正常工作。问题出在我的停止脚本中。我运行php bin/console my:daemon stop,并为所使用的所有屏幕ID调用screen -S screenName -X quit命令:mydaemon,myworker1,myworker2,myworker3。通常,当包装屏幕进程停止时,它会杀死内部运行的实际进程。在debian下,这是真的。在FreeBSD下它会停止屏幕进程,但是内部的php进程不会受到影响。因此screen -list命令显示空列表,但ps aux | grep my:worker表示所有进程都在后台继续工作。

我想问一下,有人可以假设screen命令在这些操作系统上的行为有何区别?

0 个答案:

没有答案