2011-01-27 65 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 &你可以殺死外殼和過程活路。