Answers:
在运行命令之前,您可以追加&
到命令行以在后台运行:
long-running-command &
启动命令后,可以按CtrlZ将其挂起,然后bg
将其置于后台:
long-running-command
[Ctrl+Z]
bg
find ...
命令,然后在后台运行它。在这种情况下,您将丢失该-name
选项。
这是所有人的最爱,因为除了将过程发送到后台之外,您不必担心文本输出会弄脏终端:
nohup command &
这不仅会在后台运行该进程,还会生成一个日志(nohup.out
在当前目录中称为日志,如果不可能的话,在您的主目录中),并且如果您关闭/注销当前shell,则不会通过阻止子进程接收而杀死该进程父进程在被杀死时发出信号(即,通过SIGHUP注销到父进程,或关闭当前shell)。
还有一个叫,disown
但这是其他答案的扩展,而不是一个方法本身:
command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want
这些命令不允许您轻松恢复过程输出,除非您使用怪异的方法来完成它。
nohup
在作业控制Shell是愚蠢的。现代shell不会发送HUP
给后台进程。重定向到唯一的文件名需要付出很小的代价。
command > file.log 2>&1 & disown
有点长,nohup command &
但我想这就是@chicks的建议。
这可能是您想要的
my_command > output.log 2>&1 &
这将启动您的命令,将stdout和stderr都重定向到output.log
您可以指定的位置。如果您根本不希望存储输出,则可以使用/dev/null
而不是实际文件。
&
会在后台执行命令,以便您可以在运行时继续输入命令。
2>&1
将stderr重定向到stdout,以便捕获所有输出。
同样,当您运行类似这样的命令时,您应该从内核中获得类似于以下内容的确认信息:
[2] 1234
这意味着您的进程正在后台运行,其ID为1234
,因此如果您愿意,可以稍后将其终止kill -9 1234
2>&1
非常重要,因为命令可能会失败,并在某些情况下尝试输出错误!
$ tmux new -d 'longrunningcommand'
虽然其他使用“&”作为背景的答案都可以使用,但是您必须重定向stdout(和stderr!)。否则,输出将直接进入您的外壳,并与您可能拥有的任何其他输出混合。
如果您正在执行长命令并注销或断开连接,则后台也会失败。该系统将杀死您的工作。
如果您不熟悉screen或tmux,则它们基本上可以让您完全脱离外壳。不用后台程序,而是后台整个shell。之后,您甚至可以从另一台计算机上切换回它。它们都具有更多的功能,您可能会或可能不会在此用例之外发现有用的功能。
屏幕是久经考验的真实程序;tmux还年轻,但已经从screen的过去中学到了东西。
(为完整性起见,已回答:)您可以通过&
在命令后添加以下命令来在后台放置命令:
long_command with arguments > redirection &
我正在添加此答案以解决您问题的另一部分:
显示正在运行的后台命令的旋转器没有真正的等效功能,但是您可以通过键入jobs
或来查看后台命令的状态jobs -l
。它会向您显示您的后台命令,以及它们是否正在运行,通过信号停止(例如,带有^Z
),还是偶尔停止,因为它们正在等待您的交互式输入。
long_command with arguments &> redirection &
重定向stderr
也
您可以使用在后台运行程序&
。例如,如果要运行yum install XyZ
,可以运行:
yum install XyZ &
stdout
可以使用>
覆盖文件或>>
附加到文件的方式重定向程序的或输出。例如,如果您要登录yum
文件yum.log
:
yum install XyZ > yum.log &
或者,如果您想将输出添加到现有文件中log
:
yum install XyZ >> log &
错误被打印到stderr
而不是stdout
,并且可以通过相同的方式重定向到文件,但是可以使用2>
:
yum install XyZ 2> errors
yum install XyZ 2>> errors
如果您想同时重定向stderr
和stdout
,则可以使用&>
:
yum install XyZ &> output
yum install XyZ &>> output
您可以在后台运行命令,只需在&
其后加上符号即可。
例如:
areallylong_command &
将在后台运行它。
您可以进一步将stdout / stderr重定向到适当的文件,以便在执行操作时它们不会出现在终端上。
请参阅此以获取更多信息:http : //tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html