使用 -d -m 启动具有后台进程的屏幕会话会导致屏幕会话在进程退出时终止。
有没有什么方法可以让屏幕会话在进程退出后继续存在,但仍可在没有任何用户交互的情况下启动它?
答案1
如果您的流程可以获取/etc/profile
或/etc/bash.bashrc
及其各自的$HOME
文件,那么这可能对您有用:
screen -d -m bash --init-file background-shell-script
当“background-shell-script”退出时,当您使用 重新连接时,screen 会话将在 shell 提示符下等待您screen -r
。如果您在进程完成之前重新连接,您将看到它在发生时创建的任何输出,并在完成时获得 shell 提示符。
要获取正常启动文件,请将其添加到脚本的开头:
. /etc/profile
# more source statements, if needed
# do your stuff here
答案2
也许如果你将调用包装到 shell 脚本中,然后你就可以调用 shell 并选择在脚本完成后继续运行。
答案3
这里的关键是您希望进程脱离控制 shell 或 tty。最简单的方法是运行 nohup,即 nohup whateverprocess。man nohup 了解更多信息。
目前尚不清楚为什么您希望屏幕会话在进程退出后继续存在。大概是为了捕获输出,但可以轻松重定向。
使用 screen 的唯一原因是,如果您希望进程运行,但它仍需要标准输入/输出进行控制。无论如何,建议尽可能避免这种情况,只使用 nohup,如果它是一个长期运行的进程,则将其作为长期运行的服务集成到机器的启动过程中。