运行一个shell脚本并立即对其进行后台处理,但是要保持检查其输出的能力

ame*_*ior 21 bash daemon gnu-screen background-process job-control

如何运行shell脚本并立即对其进行后台处理,但是可以通过拖尾/tmp/output.txt随时检查其输出

如果我能在以后进行前瞻,那将是很好的.

PS如果您还可以向我展示如何将后台进程"发送"到可能已初始化或未初始化的gnu屏幕,那将是非常酷的.

Jon*_*ski 37

在启动过程中"后台"一个过程

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

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

要前置该过程,只需使用该fg命令即可.

(您可以在后台看到作业列表jobs.)

例如:

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

后台当前正在运行的进程

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

  1. 按Ctrl + z将当前进程置于休眠状态并返回到shell.(此过程将暂停,直到您发送另一个信号.)
  2. 运行该bg命令以恢复该过程,但让它在后台而不是前台运行.

  • 哇,我多年来一直在寻找这个(你所说的“运行`bg`命令......”) (3认同)
  • 好答案.顺便说一句:您可以更简单地使用子shell发送_multiple_ shell命令到背景中(`(睡眠3 &&'回声我刚刚醒来')&`)或组命令(`{sleep 3 && echo'我刚刚醒来';}&`).要使重定向成为后台命令的一部分,请将其放在_before_中``&`; 例如,`(睡3 && echo'我刚刚醒来')> /tmp/output.txt&` (3认同)
  • 未提及的内容:如果您不希望将后台命令的输出发送到终端(未重定向),请执行“ stty tostop”,并且该过程将收到“ SIGTTOU”信号,则可以执行“ fg”和“看到输出。 (2认同)

Mos*_*ted 7

一种允许管理多个进程并具有漂亮的终端 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
Run Code Online (Sandbox Code Playgroud)

请参阅文档以获取更多信息。

用户界面


小智 6

Another way is using the nohup command with & at the end of the line.

Something like this

nohup whatevercommandyouwant whateverparameters &
Run Code Online (Sandbox Code Playgroud)

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

  • 另请注意,如果您的系统具有“systemd”,并且已将其配置为在您注销后终止由您的用户界面启动的进程,那么如果该进程是您用户的直接或间接子进程,则没有任何黑客可以使任何进程在您注销后继续运行。会议。双分叉、nohup 或任何其他技巧都无法逃脱 systemd 使用的 cgroup 遏制。不过,根进程可以更改 cgroup。 (4认同)
  • 如果我想“`nohup cmd params &`”*使用其他命令*,比如`echo "test" && nohup cmd params & && zip blabla`,我该怎么办 (2认同)