the*_*ror 159 command-line background-process
在 CLI 上,有时我输入的命令需要一段时间才能完成,有时我知道什么时候会发生。我对 Linux 中的“背景”等有些困惑。
告诉 CLI 我不想等待的最常见(或用户友好的方式)是什么,请立即给我回提示。如果它能给我一个进度条或只是忙碌的微调器,那就太好了!
Gre*_*ill 170
运行命令前,可以&在命令行追加到后台运行:
long-running-command &
Run Code Online (Sandbox Code Playgroud)
启动命令后,您可以按CtrlZ暂停它,然后bg将其置于后台:
long-running-command
[Ctrl+Z]
bg
Run Code Online (Sandbox Code Playgroud)
        Bra*_*iam 124
这是所有人的最爱,因为除了将进程发送到后台之外,您不必担心文本输出会弄脏您的终端:
nohup command &
Run Code Online (Sandbox Code Playgroud)
这不仅会在后台运行进程,还会生成一个日志(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
Run Code Online (Sandbox Code Playgroud)
这些命令不允许您轻松恢复进程输出,除非您使用黑客的方式来完成它。
tra*_*nik 38
这可能就是你想要的
my_command > output.log 2>&1 &
这将启动您的命令,将 stdout 和 stderr 重定向到output.log您可以指定的一些。如果您根本不关心存储输出 - 您可以使用/dev/null而不是实际文件。
&将在后台执行命令,以便您可以在运行时继续输入命令。
2>&1将 stderr 重定向到 stdout,以便捕获所有输出。
此外,当您运行这样的命令时,您应该从内核获得类似于以下内容的确认:
[2] 1234
这意味着您的进程正在后台运行并且其 id 是1234,因此您可以稍后将其杀死,如果您愿意kill -9 1234
yoo*_*nix 11
$ tmux new -d 'longrunningcommand'
Run Code Online (Sandbox Code Playgroud)
虽然使用 '&' 到背景的其他答案将起作用,但您必须重定向标准输出(和标准错误!)。如果不这样做,输出将直接进入您的外壳,与您可能拥有的任何其他输出混合。
如果您正在运行一个长命令并注销或断开连接,后台处理也会失败。系统会杀死你的工作。
如果您不熟悉 screen 或 tmux,它们基本上可以让您完全脱离外壳。您不是在后台运行您的程序,而是在后台运行整个 shell。然后您可以稍后切换回它,甚至可以从另一台计算机切换回它。它们都具有更多功能,您可能会或可能不会在此用例之外发现这些功能。
Screen 是久经考验的老程序;tmux 年轻得多,但已经从 screen 的过去中吸取了教训。
(为了完整性 - 已经回答:)您通过&在命令后添加以下命令将命令置于后台:
long_command with arguments > redirection &
Run Code Online (Sandbox Code Playgroud)
我正在添加此答案以解决您问题的另一部分:
没有真正等同于显示正在进行的后台命令的微调器,但您可以通过键入jobs或来查看后台命令的状态jobs -l。它会向您显示您的后台命令,以及它们是否正在运行、通过信号停止(例如,使用^Z),或者偶尔停止,因为它们正在等待您的交互式输入。
您可以使用在后台运行程序&。例如,如果您想运行yum install XyZ,您可以运行:
yum install XyZ &
Run Code Online (Sandbox Code Playgroud)
stdout可以使用覆盖文件或附加到文件来重定向程序的或>输出>>。例如,如果您想登录yum一个文件yum.log:
yum install XyZ > yum.log &
Run Code Online (Sandbox Code Playgroud)
或者,如果您想将输出添加到现有文件中log:
yum install XyZ >> log &
Run Code Online (Sandbox Code Playgroud)
错误被打印到stderr而不是stdout,并且可以以相同的方式重定向到文件,但使用2>:
yum install XyZ 2> errors
yum install XyZ 2>> errors
Run Code Online (Sandbox Code Playgroud)
如果您想同时重定向stderr和stdout,您可以使用&>:
yum install XyZ &> output
yum install XyZ &>> output
Run Code Online (Sandbox Code Playgroud)
        &您只需在命令后面加上符号即可在后台运行命令。
例如:
areallylong_command &
Run Code Online (Sandbox Code Playgroud)
将在后台运行它。
您可以进一步将 stdout/stderr 重定向到适当的文件,以便在您执行某些操作时它们不会出现在您的终端上。
有关更多信息,请参阅:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           547948 次  |  
        
|   最近记录:  |