我有一个像这样调用 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} 启动配置 {$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 停止时,这些进程也会停止。
最佳答案
要向上传播退出代码, parent 和祖 parent 必须存在,如果你杀死祖 parent ,也就是 apache,是的,你杀死了子孙,除非他们离开家庭并成为守护进程。
关于php - 在 Apache + PHP + Bash 中让进程 fork 并独立于父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671985/