2011-04-03 84 views
1

根據這個常見問題(和許多其他的書):爲什麼後臺進程組死的時候終端關閉

ftp://rtfm.mit.edu/pub/faqs/unix-faq/programmer/faq

1.15爲什麼我的過程中得到SIGHUP信號時,其父母死亡?

SIGHUP將不會被髮送到後臺進程時,他們都不是「停止」。

但我們都知道,如果SIGHUP沒有在後臺進程中捕獲,當你關閉終端(或像ssh這樣的連接)時,它們將會死亡。

即CTRL + Z - bg不足以使終端關閉時進程生存。

但是爲什麼? 任何智慧感謝!

+0

當終端關閉時,後臺進程可以正常運行。他們只有在試圖寫封閉終端並收到SIGTTOU時才終止。 – 2011-04-03 12:27:29

+0

如果你澄清了你所問的外殼,這將有所幫助。 – 2011-10-19 12:19:01

回答

0

谷歌搜索了一下之後。 我假設導致退出後臺進程的HUP信號來自shell。

步驟如下:

  1. 終端關閉時,bash從內核(驅動器)接收SIGHUP

  2. 擊在接收到SIGHUP的退出默認。在退出之前,它會重新發送SIGHUP到所有作業,運行或停止

  3. 所有工作,包括後臺進程,退出,如果他們不捕捉SIGHUP

1

沒有爲它的一個簡單的解決方案。在運行命令之前使用nohup。

相關問題