有没有办法从另一个进程启动一个脚本,以便如果进程死亡/结束,脚本仍然继续?
请setuid做这个? 如果我要将所有者设置为root,然后启动脚本?
例如,如果我有一些PHP代码启动一个脚本,但httpd死亡或死亡,我认为这需要我的脚本。 有没有解决的办法?
具体来说,我在Fedora 10上使用Apache 2和PHP 5。
从这里 :
function become_daemon() { $child = pcntl_fork(); if($child) { exit; // kill parent } posix_setsid(); // become session leader }
另外,关闭STDIN,STDOUT和STDERR是一个好主意,但我不确定如何在PHP中这样做。
试试“nohup yourscript.sh&”
您可以使用bash中内置的“disown”来从产生它的shell中分离一个作业。 请参阅: http : //www.faqs.org/docs/bashman/bashref_79.html
你应该使用php的pcntl_fork()(由@bmdhacks推荐)。
基本的过程是fork,setsid,再次fork,chdir到/,关闭所有打开的文件描述符。 标准的做法还要求你创建一个名为/var/run/$NAME
的文件(其中$ NAME是守护进程的名称),并将PID写入该文件,以便稍后控制进程的执行。
我不是一个PHP程序员,但这是标准* nix的东西。 最好的PHP例子我可以谷歌看起来像这样hello-world-daemon-fork-fork但是,他没有改变他的工作目录为“/”,也没有看起来像他关闭打开的文件描述符(我不知道这是如何工作在PHP中),以便他没有连接到原始进程的标准输入,标准输出和标准错误。
我挖了一点,发现另一篇文章,可能会帮助php的pcntl_fork()
而且,它看起来有一个名为System_Daemon的梨模块,它为您处理(我通过这里找到它)。
从命令行shell中,您可以在命令行的末尾添加&符号(&),以在后台启动该命令,从而将命令从shell中分离出来。
这里有一些很好的信息: http : //www.linuxforums.org/forum/linux-programming-scripting/50096-moving-processes-background-foreground.html