![运行命令而不让我等待](https://linux22.com/image/144655/%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%E8%80%8C%E4%B8%8D%E8%AE%A9%E6%88%91%E7%AD%89%E5%BE%85.png)
在 CLI 上,有时我输入的命令需要一段时间才能完成,有时我知道什么时候会发生。我对 Linux 中的“背景”等有点困惑。
告诉 CLI 我不想等待的最常见(或用户友好的方式)是什么,请立即返回我的提示。如果它能给我一个进度条或只是忙碌的旋转器,那就太好了!
答案1
在运行命令之前,您可以附加&
到命令行以在后台运行:
long-running-command &
启动命令后,您可以按CtrlZ暂停它,然后bg
将其置于后台:
long-running-command
[Ctrl+Z]
bg
答案2
这是所有人的最爱,因为除了将进程发送到后台之外,您不必担心文本输出弄脏您的终端:
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
这些命令不允许您轻松恢复过程输出,除非你用一种黑客的方式来完成它。
答案3
这可能就是你想要的
my_command > output.log 2>&1 &
这将启动您的命令,将 stdout 和 stderr 重定向到output.log
您可以指定的位置。如果您根本不关心存储输出 - 您可以使用/dev/null
它而不是实际文件。
&
将在后台执行命令,以便您可以在运行时继续输入命令。
2>&1
将 stderr 重定向到 stdout,以便捕获所有输出。
另外,当您运行这样的命令时,您应该从内核获得类似于以下的确认:
[2] 1234
这意味着您的进程正在后台运行,其 id 是1234
,因此如果您愿意,您可以稍后杀死它kill -9 1234
答案4
&
(为了完整性 - 已经回答了:)您可以通过在命令后添加以下命令将命令置于后台:
long_command with arguments > redirection &
我添加这个答案是为了解决您问题的其他部分:
没有真正相当于用于显示正在进行的后台命令的微调器,但您可以通过键入jobs
或查看后台命令的状态jobs -l
。它将向您显示您的后台命令,以及它们是否正在运行、通过信号停止(例如,使用^Z
),或者偶尔停止,因为它们正在等待您的交互式输入。