现在我正在 GNU screen 中运行一个进程。Screen 使用命令screen -dmS screenname
和附加的启动screen -r screenname
。进程在 screen 会话中启动,并在一段时间后被终止。
当内部进程结束后,如何让屏幕终止?
注意:我不喜欢循环,所以我正在寻找替代方案。有时我会在流程开始时使用后面的 ,但如果我在流程上& 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 会自动退出。由于您只在 screen 内运行一个程序,所以当程序退出时,screen 会话中的最后一个(也是唯一的)窗口将关闭。如果您通过附加到 screen 会话来启动程序,然后在 screen 会话内的 shell 提示符下键入命令,那么 screen 会等待您的 shell 退出。您可以通过键入exec PROGRAM
而不是仅仅PROGRAM
在 shell 提示符下键入来使这种情况在程序完成时发生(实际上这将退出 shell 并将其替换为PROGRAM
)。
如果你只需要屏幕的可拆卸功能,那么一个轻量级的替代方案是德塔赫。
答案3
您可以使用命令名称启动屏幕会话,例如screen -dmS session vim
将打开一个使用 vim 退出的屏幕会话。在现有的屏幕会话中,您可以使用它exec
来获得相同的效果:。