告诉CLI不想等待的最常见(或用户友好方式)是什么,请给我立即返回提示。如果可以给我一个进度条或忙碌的忙碌者,那就太好了!
#1 楼
在运行命令之前,可以将&
附加到命令行以在后台运行:long-running-command &
启动命令后,可以按CtrlZ将其挂起,然后然后将
bg
放在背景中:long-running-command
[Ctrl+Z]
bg
评论
我使用“ find〜/ a.java&”命令,但是我没有进入后台吗?另外,我尝试了cmd + z(适用于Mac)....它不起作用
– humble_introvert
15年8月5日在10:08
@AbhimanyuAryan,也许您想先调试find ...命令,然后在后台运行它。在这种情况下,您缺少-name选项。
– Alexis Wilke
16年8月18日在5:19
我希望你今天对火山爆发没事@Greg Hewgill
–凯尔·布莱恩汀(Kyle Bridenstine)
19/12/9在17:54
@KyleBridenstine是的,这里没有问题,就像在800公里外。感谢您的来信。
– Greg Hewgill
19/12/9在18:40
#2 楼
这是所有人的最爱,因为除了将过程发送到后台之外,您不必担心文本输出会弄脏终端:nohup command &
在后台运行该进程,还生成一个日志(在当前目录中称为
nohup.out
,如果不可能,则在您的主目录中),如果关闭/注销当前shell,则不会通过阻止子进程接收父进程而终止进程还有一个叫
disown
的信号,但是它是其他答案的扩展,而不是方法本身: br /> command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want
这些命令不允许您轻松地恢复过程输出,除非您使用朴实的方法来完成它。
评论
自95年以来为Sysadmin。直到今天为止都没听说过解散,谢谢!但是,它不适用于每个shell(检查bash,zsh,tcsh。tcsh无效)。
–yoonix
2013年12月5日,下午2:36
在作业控制外壳中使用nohup很愚蠢。现代shell不会将HUP发送到后台进程。重定向到唯一的文件名需要付出很小的代价。
–小鸡
15年11月4日在16:47
@chicks这里的用例是防止stderr和stdout用自动创建日志文件的优点来污染终端。
–脑袋
15年11月4日在16:50
命令> file.log 2>&1&disown比nohup命令长&但我想这就是@chicks的建议。
– joeytwiddle
16年9月1日在7:33
#3 楼
这可能就是您想要的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非常重要,因为命令可能失败,并在某些情况下尝试输出错误!
–ericn
17年6月16日在3:09
当以上答案不满意时,此方法将起作用。
– Domagoj
'18 -10-1在7:30
#4 楼
查看屏幕或tmux。tmux
的示例:$ tmux new -d 'longrunningcommand'
虽然其他将'&'用作背景的答案都可以使用,但您必须重定向stdout(和stderr!)。否则,输出将直接进入您的外壳,并与您可能拥有的其他任何输出混合。
如果您运行长命令并注销或断开连接,则背景也会失败。该系统将终止您的工作。
如果您不熟悉screen或tmux,它们基本上可以使您完全脱离外壳。无需后台程序,而是后台整个shell。之后,您甚至可以从另一台计算机上切换回它。它们都具有更多的功能,在此用例之外,您可能会或可能不会找到有用的功能。
屏幕是久经考验的真实程序; tmux年轻得多,但已经从screen的过去中学到了东西。
评论
这个答案错过了实际答案,听起来像RTFM。
– Lloeki
17年6月20日在12:54
#5 楼
(为完整性起见,已回答:)您通过在命令后添加&
在后台放置命令:long_command with arguments > redirection &
我添加此答案以解决其他问题您的问题的一部分:
没有任何等效的微调器可以显示正在进行的后台命令,但是您可以通过输入
jobs
或jobs -l
来查看后台命令的状态。它会向您显示您的后台命令,以及它们是否正在运行,是否通过信号停止(例如,通过^Z
停止),还是偶尔停止,因为它们正在等待您的交互式输入。评论
使用参数&>重定向&来重定向stderr的long_command
–冰焰
17年1月11日在7:24
#6 楼
您可以使用&
在后台运行程序。例如,如果您想运行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
#7 楼
您只需在其后面加上&
符号即可在后台运行命令。例如:
areallylong_command &
将在后台运行命令。
您可以进一步将stdout / stderr重定向到适当的文件,以便在执行操作时它们不会出现在终端上。
有关更多信息,请参见此: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
评论
另请参阅如何将命令行应用程序直接发送到后台?如果您已经启动了命令并将其发送到后台。