运行命令而不让我等待

运行命令而不让我等待

在 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),或者偶尔停止,因为它们正在等待您的交互式输入。

相关内容