有没有办法通过后台进程启动屏幕,但在进程退出时它不会终止?

有没有办法通过后台进程启动屏幕,但在进程退出时它不会终止?

使用 -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,如果它是一个长期运行的进程,则将其作为长期运行的服务集成到机器的启动过程中。

相关内容