如果我通过在命令行中正常输入来启动一个进程,例如
wget http://site.com/bigfile.zip
然后决定将其移至后台,我知道我可以使用类似的方法ctrl+z
然后bg 1
(或jobs
首先,如果需要获取 id)将其放在后台。
我的问题是,是否有一种方法可以将作业从前台直接移动到后台而不停止它 - 就像除此之外的另一个快捷方式ctrl+z
可以做到这一点。
我还意识到我可以&
在原始命令的末尾附加以在后台启动它,但问题是关于何时在前台启动一个进程以及然后意识到您想将其移至后台。
答案1
是的,一点没错:屏幕(1)就是答案。
首先,添加screen -R
到 ~/.bash_profile 或等效项,然后注销并重新登录。
要继续在后台运行的程序,请按 Control-A,然后按 N。这将在前台创建一个新的终端屏幕,同时无缝地继续在后台运行的进程。
按下 Control-A 然后按“以获取已打开的屏幕的交互式列表,或者按下 Control-A 然后按数字直接切换到特定屏幕。
您最初的需求是能够将进程移至后台而不停止它。Screen 还有两个额外的好处,它们是巨大的如果你喜欢同时做多件事:
- 与使用 Control-Z、bg、fg 等相比,您可以更加流畅地在进程之间切换。
- 如果您的终端会话断开连接,您的进程(如
wget http://example.com/bigfile.iso
)将不会终止!当您重新连接时,您的所有 shell 会话都将在那里等着您。
欲了解更多信息,请阅读screen(1) 手册页, 或者GNU Screen 手册。
答案2
bg
启动已停止的作业,并让其在后台运行。基本上fg
和bg
执行的操作相同,它们会恢复进程,但fg
在前台执行,而bg
在后台执行。
只需运行bg %(number of the job)
,您将看到输出“runnning”。如果您检查您的作业,您将看到您的作业正在运行并且没有停止。