2011-01-27 63 views
2

我正在通过PHP访问Web服务器。我想更新Apache配置中的一些信息,因此我启动了一个进行更改的shell脚本。然后我想停止并重新启动Apache。Fork shell脚本(不是&)

问题:只要我停止Apache,我的进程停止,我的shell脚本作为子进程被终止。 Apache从不重新启动。 Apache重启也会发生这种情况。

有没有办法为shell脚本分离独立的非子进程,这样我可以重新启动Apache?

THX, B先生

+1

什么是命令? `/etc/init.d/apache2 stop`?也许你可以使用`/etc/init.d/apache2 restart`? PS。无论谁提出与`apachectl`相同的建议,都不需要删除评论,因为它与另一个类似。 – Benoit 2011-01-27 13:39:54

+0

也许apachectl优雅可能是一个更好的选择... – 2011-01-27 13:50:25

回答

4

您可以使用disown

disown [-ar] [-h] [jobspec ...]

不带选项,每个JOBSPEC从活动作业表中删除。如果给出了'-h'选项,作业不会从表中删除,但会被标记,以便在shell收到SIGHUP时SIGHUP不会发送到作业。如果jobspec不存在,既没有提供`-a'也没有`-r'选项,则使用当前作业。如果没有提供jobspec,`-a'选项意味着删除或标记所有作业;没有jobspec参数的`-r'选项将操作限制为正在运行的作业。

./myscript.sh & 
disown 

./myscript.sh将继续运行,即使启动它的脚本死亡。

1

看看nohup,可能适合您的需求。

让我们假设你有一个名为test.sh

for i in $(seq 100); do 
    echo $i >> test.temp 
    sleep 1; 
done 

脚本如果您运行的nohup ./test.sh &你可以杀死外壳和过程活路。