在Apache + PHP + Bash中获取一个fork进程并独立于父进程

时间:2016-09-24 02:47:51

标签: php linux bash

我有一个像这样调用liquidsoap的bash脚本

/bin/sh -c "echo \$\$ > \"${sdir}/pid/${sfile}.pid\" && exec liquidsoap \"${sdir}/liq/${sfile}.liq\" >/dev/null 2>&1 || rm \"${sdir}/pid/{$sfile}.pid\"" &

(为了便于阅读,填充变量可能看起来像这样)

/bin/sh -c "echo \$\$ > \"/radio/pid/station.pid\" && exec liquidsoap \"/radio/liq/station.liq\" >/dev/null 2>&1 || rm \"/radio/pid/station.pid\"" &

在PHP中,使用

调用脚本

return shell_exec("{$this->streamBase}/scripts/{$this->streamName} start config {$stationConfig}");

我的问题是,我只需重新启动Apache,当我这样做时,它也杀死了液体肥皂实例。我想让它完全独立于Apache运行,这样我就可以重新启动Apache而且它们会继续运行。

我不确定如何实现这一目标。

编辑: 我试过改变

/bin/sh -c "echo \$\$ > \"${sdir}/pid/${sfile}.pid\" && exec liquidsoap \"${sdir}/liq/${sfile}.liq\" >/dev/null 2>&1 || rm \"${sdir}/pid/{$sfile}.pid\"" &

(/bin/sh -c "echo \$\$ > \"${sdir}/pid/${sfile}.pid\" && exec liquidsoap \"${sdir}/liq/${sfile}.liq\" >/dev/null 2>&1 || rm \"${sdir}/pid/{$sfile}.pid\"" & ) &

nohup /bin/sh -c "echo \$\$ > \"${sdir}/pid/${sfile}.pid\" && exec liquidsoap \"${sdir}/liq/${sfile}.liq\" >/dev/null 2>&1 || rm \"${sdir}/pid/{$sfile}.pid\"" &

如果我重新启动(或停止/启动)Apache,则不会保持liquidsoap运行。当Apache停止时,这些进程也会停止。

1 个答案:

答案 0 :(得分:0)

要在父母和祖父母必须存在的链条上传播退出代码,如果你杀了祖父母,也就是阿帕奇,是的,你杀了孩子和孙子,除非他们离开家庭并成为守护进程。