如何在后台执行任务?

如何在后台执行任务?

是否可以在后台运行从终端启动的任务或脚本?

答案1

这里有多个答案,取决于你想要什么(这个答案在bashzshshell 中有效,其他答案可能有所不同)。

如果您需要在后台运行命令并且在运行之前知道这一点,只需&在命令末尾添加一个(使用sleep 60,1分钟内不执行任何操作,作为示例命令):

[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %

如果你已经运行它,你可以用ctrl-来停止它Z,当 shell 给你提示时,你可以用以下命令将其置于后台bg

1& [romano:~] % sleep 60  
^Z
[1]  + 9084 suspended  sleep 60
1z [romano:~] 20 % bg
[1]  + 9084 continued  sleep 60
1& [romano:~] % 

在这两种情况下,进程 / 作业仍然附加到你的终端;如果你关闭终端挂断(HUP)信号被发送到进程 --- 大多数进程将正常退出。如果您需要确保进程继续,您可以使用以下方式启动它:

nohup sleep 60 & 

bg或者,在使用或简单的将其发送到后台后&,告诉 shell 忘记它,使用:

disown %% 

%%作业控制快捷方式,这里代表最后在后台发送的进程)。

然后,您必须考虑进程的输出 --- 在前两种情况下,输出仍将到达终端;在 的情况下,nohup它将被转移到名为 的文件上nohup.out,而在后一种情况下(使用disown),它将转到终端,除非您关闭它,在这种情况下行为是相当不确定的。使用以下方法照顾后台进程的输出是一种很好的做法重定向

答案2

添加&到命令。

例子:

$ cp FromA ToB &

答案3

此示例将在后台运行更新:

sudo apt-get dist-upgrade -y &

只需注意单个 &。
如果要隐藏标准输出,请执行以下操作:

sudo apt-get dist-upgrade -y > /dev/null &

答案4

如果您希望它更高级,并且希望能够在稍后本地或通过 SSH 使用会话,则可以使用屏幕。

# screen
# apt-get update -y

然后按CTRL+,A接着按D

稍后您可以重新连接:

# screen -rd

相关内容