当我运行 `./command.sh &` 时,后台任务被挂起。我怎样才能让它继续运行?

Mat*_*der 12 bash job-control background-process

这是我正在运行的:

alexandma@ALEXANDMA-1-MBP ./command.sh &
[2] 30374
alexandma@ALEXANDMA-1-MBP
[2]  + suspended (tty output)  ./command.sh
Run Code Online (Sandbox Code Playgroud)

我不希望它开始暂停,我希望它继续在后台运行。我将在一个循环中运行一堆这些,所以我需要一些可以这样工作的东西。

我怎样才能让它继续运行?

Hau*_*ing 14

在 Anthon 的解释中添加一个细节:

停止写入后台进程的情况并非总是如此。这取决于终端设置tostop

stty tostop
stty -tostop
Run Code Online (Sandbox Code Playgroud)

可用于切换此设置。因此,如果您希望后台进程写入“另一个进程的”终端,那么您可以保持它运行但不需要tmuxscreen或类似的。


Ant*_*hon 7

它因为给出的原因而停止:它试图输出到 tty。您可以尝试将输出重定向,如果./command.sh是,或者在运行命令支持tmux或者screen它的窗口是自己的。例如

 tmux new-window -n "window name" ./command.sh
Run Code Online (Sandbox Code Playgroud)

然后查看与创建的窗口的列表tmux list-windows,并重视tmuxtmux attach

这样,程序仍将等待输入/输出发生,但是一旦进入适当的窗口,您就可以轻松提供输入,并且输出将在没有任何活动的情况下被捕获。


mdp*_*dpc 5

最简单的方法是执行如下命令:

 nohup ./command.sh </dev/null &
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 SH 变体(不是 CSH 变体)并且将终止您的会话,我会将 nohup 包括在内。