运行 shell 脚本并立即将其置于后台,但保留检查其输出的能力

问题描述 投票:0回答:4

如何运行 shell 脚本并立即将其设置为 background,同时保持通过尾随

/tmp/output.txt
随时检查其输出的能力。

如果我可以稍后再前台该过程,那就太好了。


附注

如果您还可以向我展示如何将后台进程“发送”到可能已初始化或尚未初始化的 GNU 屏幕,那就太酷了。

bash background-process daemon gnu-screen job-control
4个回答
160
投票

启动进程时将其“置于后台”

只需在命令后添加一个&符号(

&
)即可。

如果程序写入标准输出,它仍然会写入您的控制台/终端。


将进程置于前台

只需使用

fg
命令即可。您可以使用
jobs
在后台查看职位列表。

例如:

sh -c 'sleep 3 && echo I just woke up' & jobs


将当前正在运行的进程置于后台

如果您已经在前台启动了该进程,但想将其移至后台,您可以执行以下操作:

  1. Ctrl+z 使当前进程进入睡眠状态并返回 shell。此过程将暂停,直到您向其发送另一个信号。
  2. 运行
    bg
    命令来恢复进程,但让它在 background 而不是 foreground 中运行。

28
投票

另一种方法是使用

nohup
命令,并在行尾添加
&

类似这样的事情

nohup whatevercommandyouwant whateverparameters &

这将在后台运行它并将其输出发送到 nohup.log 文件。


7
投票

hapless 实用程序是一种易于使用的方法,允许管理多个进程并具有漂亮的终端 UI。

使用

pip install hapless
(或
python3 -m pip install hapless
)安装并运行

$ hap run my-command  # e.g. hap run python my_long_running_script.py
$ hap status  # check all the launched processes
$ hap logs 4  # output logs for you 4th background process
$ hap logs -f 2  # continuously stream logs for the 2nd process

请参阅文档了解更多信息。


0
投票

我尝试了

nohup
,但我的进程在一两天后停止了,所以我尝试了这个简单的bash脚本来在它停止后重新运行我的命令

运行.sh

while true; do
[ -e stopme ] && break
python3 main.py # your command here
done

然后做

nohup bash run.sh &
© www.soinside.com 2019 - 2024. All rights reserved.