使用-d -m启动具有后台进程的屏幕会话会导致屏幕会话在进程退出时终止。
有什么办法可以让屏幕会话在进程退出后继续执行,但仍然可以在没有任何用户交互的情况下启动屏幕会话?
如果你的进程可以获取/etc/profile
或/etc/bash.bashrc
及其相应的$HOME
文件,那么这可能适用于你:
screen -d -m bash --init-file background-shell-script
当“background-shell-script”退出时,屏幕会话将在您使用screen -r
重新挂接时在shell提示符下等待您。 如果在进程完成之前重新连接,您将看到它在创build时所创build的任何输出,并在完成时提供一个shell提示符。
要获取正常的启动文件,请在脚本的开头添加它们:
. /etc/profile # more source statements, if needed # do your stuff here
也许如果你把这个调用包装到一个shell脚本中,并且在脚本完成后用你的选项保持它运行,你就可以调用你的shell。
这里的关键是你希望进程从控制shell或者tty中分离出来。 做这个最简单的方法就是运行nohup,即nohup无论什么过程。 man nohup了解更多信息。
它不清楚为什么你会希望屏幕会话过程退出后继续存在。 大概是为了捕获输出,但是这很容易被redirect。
使用屏幕的唯一原因是如果您希望进程运行,但仍然需要标准input/输出进行控制。 无论如何,build议尽可能避免使用nohup,如果长时间运行的过程将其作为长时间运行的服务集成到机器的启动过程中。