2012-01-10 25 views
1

我有一個腳本以守護進程模式啓動屏幕,後者運行程序命令。GNU屏幕在守護進程模式下運行時,如果它收到SIGTERM會發生什麼情況:

screen -L -c <SCREEN_CONFIG-FILE> -dmS <SCREEN-NAME> <program-COMMAND> 

該腳本將在啓動屏幕後退出。

當我做一個ps,我看到屏幕和程序都運行不同的pgid和sid。 程序的ppid是screen〜s pid。

現在如果一個SIGTERM被髮送到屏幕進程,程序會發生什麼:它會得到SIGTERM:根據我的經驗,屏幕和程序都被殺死了,但程序沒有得到SIGTERM信號,它因爲我想一些其他信號。

回答

2

如果發送SIGTERM屏幕守護進程就會終止,所有的孩子:

而且,如果SIGTERM發送到程序過程中直接或如果程序退出本身,將在屏幕的過程還將死後會發生什麼進程也將終止。如果您發送SIGTERM命令的過程,它可能取決於命令。通常它也應該終止,如果它是一些你可以編輯的腳本可能能夠捕獲SIGTERM並阻止它被終止。

比方說你做了這樣的事情:

screen -dmS test-screen bash -c top (screen PID 2001/top PID 3001) 

和你說

kill 2001 

屏幕守護進程將終止,並用它承載頂部bash和頂部也將被終止。

kill 3001 

將終止頂部,bash將終止並且屏幕守護進程將結束。

+0

當SIGTERM發送到2001年時,頂部如何終止? SIGTERM會傳播到頂端還是有其他信號發送到頂端?在第二種情況下,爲什麼屏幕守護進程會結束,我的意思是如何完成的? – Medicine 2012-01-10 20:49:36

+0

我注意到,當SIGTERM被髮送到2001年時,SIGTERM不會傳播到程序3001,但仍然有3001被殺死,在這種情況下可以通過SIGKILL或其他信號屏蔽程序進程: – Medicine 2012-01-10 21:21:03

相關問題