2017-04-05 29 views
0

Cygwin發生了一些奇怪的事情。 我運行一個腳本,把一些進程放到後臺。然而,一旦腳本結束,它們都會死亡。從腳本調用的後臺進程在它結束後死掉

簡單的例子,利用這個腳本:

tail -f logfile.log & 

我可以看到尾部的作品(它打印最近的X線),但這個過程了,因爲一旦腳本結束是不是在後臺。

在Linux上,它的行爲有所不同,爲什麼?

+0

試圖在我的cygwin安裝中重現這一點,而我沒有看到你的報告。腳本退出後,尾巴仍在運行。 – ewindes

回答

1

我想在linux上嘗試nohup *cmd* &。但是你需要考慮傳遞給孩子的文件描述符。所以nohup *cmd* </dev/null >/dev/null 2>&1 &tail -f輸出將在哪裏?退出外殼時窗口是否關閉?然後,如果您想查看輸出,則不能退出shell。

+0

cygwin窗口保持打開狀態,所以我可以在日誌被查看時查看日誌。如果我直接從shell運行命令而不是從shell中的腳本運行命令,則一切正常。但是當我把它們放在一個腳本中時,它在運行後會退出。 –

+1

有兩種方法可以執行腳本的內容。您可以獲取腳本的源代碼,也可以執行腳本。當您編寫腳本時,它將由當前shell處理,因此命令的行爲與將其直接鍵入腳本時的行爲相同。使用'。 Scrpt'來做到這一點。當您執行腳本時,當前shell會啓動一個新的shell來處理腳本中的命令。使用'bash Scpt'或'。/ Scpt'來做到這一點。這個子shell會在子進程結束時收穫子進程,即殺死並等待任何啓動的子進程退出,除非子進程保護自己不被父進程殺死。 –

+0

Doug,那解決了這個問題,謝謝你的很好的解釋。我正在使用./Scrpt而不是。 Scrpt和那是問題。 +1給你。 –