
現在我正在 GNU 螢幕中運行一個進程。螢幕透過命令啟動screen -dmS screenname
並附加screen -r screenname
。進程在螢幕會話中啟動,並在一段時間後被終止。
當內部進程結束時,如何讓螢幕終止?
注意:我不喜歡循環,所以我正在尋找替代方案。有時我會在後面啟動該進程& exit
,但如果我在該進程上使用,則該進程永遠不會執行kill -9 pid
。
答案1
使用 啟動該進程exec
,因此它將是螢幕內的唯一內容(它會取代 shell,而不是在完成後返回 shell)。
答案2
嘗試這個:
screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls
首先screen -ls
,您應該看到您的螢幕會話。在第二個上,它應該消失了。當最後一個視窗關閉時,螢幕將自動退出。由於您只在螢幕內運行一個程序,因此螢幕會話中的最後一個(也是唯一一個)視窗將在程序退出時關閉。如果您透過附加到 screen 會話來啟動程序,然後在 screen 會話內的 shell 提示字元處鍵入命令,則 screen 正在等待您的 shell 退出。當程式完成時,您可以透過鍵入exec PROGRAM
而不是僅PROGRAM
在 shell 提示字元處鍵入來導致這種情況發生(實際上這將退出 shell 並將其替換為PROGRAM
)。
如果您只需要螢幕的分離能力而沒有其他,那麼輕量級的替代方案是分離。
答案3
您可以使用命令名稱啟動螢幕會話,例如screen -dmS session vim
將開啟一個以 vim 退出的螢幕會話。在現有的螢幕會話中,您可以使用以下命令exec
來獲得相同的效果: