我看到很多地方介绍了screen
即使注销也能稳定运行后台作业。他们使用
screen -dmS name
根据screen -h
,该选项意味着
-dmS name 作为守护进程启动:以分离模式显示会话。
什么是守护进程?我不明白。
我发现如果我简单地输入screen
,我就可以自动进入屏幕。运行一些命令后,按Ctrl+a d
,然后注销。这项工作仍然运行良好。那么这个简单的方法可以吗?我真的需要-dmS
让后台工作稳定吗?
让我试着总结一下:
无论您为 screen 设置了什么选项,在 screen 中运行的任何内容都可以安全地注销(但您应该分离 screen,而不是在注销时退出 screen)。
-dmS
只是一个方便在后台非迭代地提交作业的选项。那是
screen -dmS nameOfScreen command
答案1
-dm
仅当您想在屏幕会话中运行命令而不是交互输入时才使用
-S
只是给会话一个可用的名称,以便您稍后可以轻松地重新连接到它
如果您想以交互方式使用它并且不想给它一个人类可读的名称,您可以安全地省略所有这些参数。
例如,如果您只想启动screen
运行命令,/path/to/longTime
并且不想观看它运行,您可以这样做
screen -dmS longSession /path/to/longTime
或者你可以这样做
screen -S longSession
$ /path/to/longTime
ctrlad
两者都可以完成同样的事情,但其中一个更容易编写脚本,并且打字更少。
答案2
它更有用,因为它将启动在后台screen -dmS name command args
调用的屏幕会话(即分离),并在该屏幕会话内运行。name
command args
如果没有command args
,它只会在后台启动屏幕会话。
无论哪种情况,您都可以稍后使用例如 附加到该会话screen -d -r name
。从man screen
:
-d|-D [pid.tty.host]
不启动屏幕,但分离其他地方正在运行的屏幕会话。它与从屏幕控制终端输入“Ca d”具有相同的效果。
-D
相当于电源分离键。如果没有会话可以分离,则忽略此选项。与-r
/选项结合-R
可以实现更强大的效果:
-d -r
重新附加会话,如有必要,请先将其分离。
-d -R
重新附加会话,如有必要,先分离甚至创建它。
-d -RR
重新附加会话,并在必要时分离或创建它。如果有多个会话可用,请使用第一个会话。
-D -r
重新连接会话。如有必要,请先远程分离并注销。
-D -R
立即附上。详细来说,这意味着:如果会话正在运行,则重新连接。如有必要,请先远程分离并注销。如果它没有运行,则创建它并通知用户。这是作者最喜欢的。
-D -RR
立即附上。不管这意味着什么,就去做吧。注意:通过 来检查会话状态始终是一个好主意
screen -list
。
该手册页缺少一个重要的细节 - 它应该是:
-d|-D [pid.tty.host|session name]
答案3
-dmS 只是强制执行这些操作:
- 它将开始分离。
-dm
- 您可以为您的会话命名。
-S sessioname
作为守护进程运行表示它将在后台执行指定的命令,直到执行完成。
启动屏幕,然后运行命令,然后分离应该与使用 -dmS 运行命令具有相同的行为。我经常通过启动屏幕来运行游戏服务器或长时间的工作,然后用Ctrl-A+d
您还可以查看手册页man screen
以获取有关选项的更深入信息。