Apache何时/如何杀死在PHP中产生的subprocess?

不知道这是否更适合服务器故障或堆栈溢出,但在这里。

我在Apache MPM prefork上使用mod_php,并产生一个像这样的新进程:

<?php exec("/usr/bin/php -f backgroundScript.php &"); ?> 

假设新的backgroundScript.phpsubprocess运行了很长一段时间…

1)父PHP过程现在是否被认为是空闲的? 它是否返回到服务器池?

2)如果Apache杀死父PHP进程返回MinSpareServers ,那么backgroundScript.php也会被清理干净或继续无限期运行?

3)有没有其他的方式,Apache可能会无意中杀死backgroundScript.phpsubprocess? service httpd stop也许?

你想在后台运行应用程序,忘记?

关于这个在php.net上有很多post

另外,从执行官那里注意到:

注意:

如果一个程序用这个函数启动,为了继续在后台运行,程序的输出必须被redirect到一个文件或另一个输出stream。 如果不这样做将导致PHP挂起,直到程序执行结束。

在这里 , 在这里和这里等等

我有一些丑陋的代码,违反了这些规则:

 <?php echo "pre"; exec("someuglylongandworkingthingwithoutput &"); echo "post"; ?> 

刚刚在我的Fedora盒子上用默认的apache + php(prefork +模块)testing过,我用killall -9 / usr / sbin / httpd

  1. 尽pipe – 没有,没有,它仍然被认为是运行。 我的背景应用程序仍在运行
  2. 根据我上面的testing – 它会继续
  3. 取决于初始化脚本如何终止apache,根据p 1。

添加/dev/null – 一切正常,父进程ID是“1”。