如何将作业发送到后台而不停止它们?

如何将作业发送到后台而不停止它们?

Ctrl+z 将当前作业发送到后台,但停止它。

以及如何恢复已停止的工作?

答案1

您可以运行“bg”使其在后台运行。

“fg”将其移至前台

请注意,bg 和 fg 采用作业编号而不是 PID,因此如果您同时运行多个作业,请使用“jobs”命令来获取作业编号。

答案2

您还可以使用命令行上的“&”将程序作为后台作业启动。

例如

我的程序 &

请注意,输出(stdout 和 stderr)仍将转到当前 tty,因此重定向到 /dev/null 或日志文件通常是一个好主意,如下所示:

我的程序 > ~/program.log 2>&1 &

在任何一个例子中,它都是像其他作业一样的后台作业,因此您仍然可以使用“fg”将其带回前台(但如果您重定向了输出,您将看不到太多内容)。

答案3

在 bash 中,输入“bg”会将作业置于后台,直到它阻塞需要输入为止。它将继续输出到 STDERR 和 STDOUT,这可能毫无用处。您可以输入“fg”将作业带回前台。

[adjuster@mx02 ~]$ cp ~/crap/* ~/crap2 
(Ctrl-Z)
[1]+  Stopped                cp ~/crap ~/crap2 

[adjuster@mx02 ~]$ cp ~/crap3/* ~/crap4
(Ctrl-Z)
[2]+  Stopped                cp ~/crap3/* ~/crap

[adjuster@mx02 ~]$ jobs
[1]+  Stopped                cp ~/crap ~/crap2 
[2]+  Stopped                cp ~/crap3/* ~/crap

[adjuster@mx02 ~]$ bg 1
[1]- cp ~/crap ~/crap2 &
[1]-  Exit 1                  cp ~/crap ~/crap2 

[adjuster@mx02 ~]$ fg 2
[adjuster@mx02 ~]$ 

因此,这是启动一个长复制作业并暂停它,启动第二个长复制作业并暂停它,然后将第一个复制作业放入后台并让其运行,然后退出第一个复制作业。然后我将最后一个复制作业放入前台并让其完成。

答案4

另一个选择是优秀的屏幕实用程序,可用于同时运行多个进程,而无需保持终端打开。它还允许比 bg 和 fg 更容易的交互。

相关内容