通常,当您在终端中运行一个命令时,您必须等到该命令完成后才能输入另一个命令。这称为在前台或前台进程中运行命令。当一个进程在前台运行时,它会占据你的shell,你可以使用输入设备与之交互。
如果该命令需要很长时间才能完成,并且必须同时运行其他命令,该怎么办?您有几个选项可以使用。最明显和直接的选择是启动一个新的Shell会话,并在其中运行命令。另一个选项是在后台运行该命令。
后台进程是一个进程/命令,从终端启动,在后台运行,无需用户交互。
在本文中,我们将讨论Linux后台进程。我们将向您展示如何在后台启动该命令,以及如何在Shell会话关闭后保持进程运行。
在后台运行Linux命令
要在后台运行命令,请在命令的末尾添加一个“&”符号(&):
com***nd &
作业ID(括在括号中)和过程ID将打印在终端上:
[1] 25177
您可以同时在后台运行多个进程。
后台进程将继续向您调用该命令的终端写入消息。要禁止显示stdout和stderr消息,请使用以下语法:
com***nd > /dev/null 2>&1 &
& gt/dev/null 2 >& amp1表示将stdout重定向到/dev/null,将stderr重定向到stdout。
使用jobs命令显示当前shell会话中所有停止的进程和后台进程的状态:
jobs -l
输出作业编号、进程ID、进程状态和启动进程的命令:
[1]+ 25177 Running ping google.com &
要将后台进程置于前台,请使用fg命令:
fg
如果您有多个后台作业,请在命令后添加%和作业ID:
fg %1
要终止后台进程,请使用kill命令,后跟进程ID:
kill -9 25177
将前台进程移至后台
要在后台移动正在运行的前台进程:
通过键入Ctrl+Z停止进程。通过键入bg将停止的进程移至后台。
Shell退出后,保持后台进程运行
如果断开或退出Shell会话,后台进程将终止。在交互式shell会话结束后,有几种方法可以保持进程运行。
一种方法是使用内置的disown shell从shell的作业控制中删除作业:
disown
如果您有多个后台作业,请在命令后添加%和作业ID:
disown %1
使用jobs -l命令确认作业已从活动作业表中删除。要列出所有正在运行的进程,包括那些没有运行的进程,请使用ps aux命令。
退出Shell后保持进程运行的另一种方法是使用nohup。
nohup命令执行作为其参数指定的另一个程序,并忽略所有SIGHUP信号。SIGHUP是当进程的控制终端关闭时发送给进程的信号。
要使用nohup命令在后台运行该命令,请键入:
nohup com***nd &
该命令被重定向到nohup.out文件。
nohup: ignoring input and appending output to 'nohup.out'
如果您注销或关闭终端,该过程将不会终止。
代理者
有许多程序可以让你同时进行多个交互式会话。
屏幕
或者Screen GNU Screen是一个终端多路复用程序,允许你启动一个屏幕会话,并在该会话中打开任意数量的窗口(虚拟终端)。即使断开连接,在屏幕中运行的进程将继续运行,即使它们的窗口不可见。
Tmux
Tmux是GNU Screen的现代替代品。使用Tmux,您还可以创建一个会话,并在该会话中打开多个窗口。Tmux会话是持久的,这意味着即使您关闭了终端,在Tmux中运行的程序也将继续运行。
结论
要在后台运行该命令,请包含&。当您在后台运行一个命令时,您可以执行另一个命令,而不必等待该命令完成。
如果您有任何问题或反馈,请随时评论。
本文来自霜华投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/507649.html