将 nohup 工作带到前台

Ada*_*tan 21 command-line process nohup background

考虑以下nohup执行:

nohup script.sh > script.out &
Run Code Online (Sandbox Code Playgroud)

有没有办法注销终端,重新连接,将进程带回前台并使用键盘与其交互?

sou*_* c. 24

nohup不会从终端断开命令,它使您的脚本忽略SIGHUP,并重定向stdout/stderr到一个文件nohup.out,以便在您注销后该命令可以继续在后台运行。

nohup不会自动将它在后台运行的命令。必须明确地做到这一点,通过以&.

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’
Run Code Online (Sandbox Code Playgroud)

jobs可以打印当前正在运行的作业及其状态。如果命令jobs找不到它,则它不再是该 shell的子进程

$ jobs 
[1]+  Running                 nohup ./script.sh &
Run Code Online (Sandbox Code Playgroud)

fg即使使用 .bash运行,也可以使用 bash 将后台作业带回前台nohup。但这不会改变输出重定向,它仍然会转到文件nohup.out.

$ fg
nohup ./script.sh
Run Code Online (Sandbox Code Playgroud)

如果您关闭 shell/终端或注销,您的命令不再是该 shell 的子级。它属于init过程。如果您搜索,pstree您会看到它现在归进程 1 ( init) 所有。无法将其带回前台,因为前台不再存在。


Gus*_*s E 9

如果您想启动一个脚本,让它在输出不打扰终端的情况下运行,然后稍后再启动以与它交互,您可能需要查看终端多路复用器。根据您的系统,我会推荐tmuxscreen. 您可以在以下链接中找到有关如何使用它们的一些信息:

多路复用:

屏幕:

编辑:添加了 tmux 引物的链接


dje*_*kyb 5

我将第二次使用终端多路复用器,但tmux,而不是屏幕。出于所有意图和目的,屏幕是无需维护的。它的配置是一种黑暗艺术,可能首先记录在《死灵之书》的附录中。尝试编写自己的配置是对克苏鲁的一瞥。严重地。看看人们的.screenrc 文件。可以肯定的是,有一些方法可以调解屏幕对配置文件的厌恶。Byobu作为凡人用户和邪恶代码之间的面纱做了令人钦佩的工作。它带有合理的颜色、菜单界面,也许最重要的是状态栏。

但正如我所说,我推荐tmux。它仍然需要一些小的配置,但它有很好的文档记录,并且您的配置文件不会看起来像胡言乱语。此外,您从颜色和状态栏开始。比较我的 screenrc 和 tmux.conf 文件: