将nohup工作带到前台

考虑以下nohup执行:

 nohup script.sh > script.out & 

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

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

TMUX:

  • Tmux入门
  • 快速简便的tmux指南
  • Tmux备忘单和快速参考

屏幕:

  • 屏幕 – 社区Ubuntu文档
  • GNU Screen:介绍和初学者的教程
  • 屏幕键盘快捷键

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

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

nohup不会自动将它在后台运行的命令。 必须通过使用&结束命令行来明确地做到这一点。

 $ nohup ./script.sh & [1] 3390 $ nohup: ignoring input and appending output to 'nohup.out' 

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

 $ jobs [1]+ Running nohup ./script.sh & 

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

 $ fg nohup ./script.sh 

如果关闭shell /终端或注销,则命令不再是该shell的子代。 它属于init进程。 如果你在pstree搜索,你会发现它现在由进程1( init )拥有。 由于前景不再存在,因此无法恢复到前台。

我将使用终端多路复用器,但tmux ,而不是屏幕。 出于所有意图和目的,屏幕是不受维护的。 它的配置是一种黑暗的艺术,可能首先记录在Necronomicon的附录中。 尝试编写自己的配置就像Cthulu的一瞥。 认真。 查看人们的.screenrc文件 。 可以肯定的是,有一些方法可以调解屏幕对配置的憎恶。 Byobu做了一个令人钦佩的工作,作为凡人用户和邪恶代码之间的面纱。 它配有合理的颜色,菜单界面,也许最重要的是状态栏。

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

  • screenrc
  • tmux.conf

如果你只是想看看现场帽子的输出,这可能适合你:

 nohup script.sh 2>&1 script.out & # later: tail -f script.out 

任何Linux命令都可以发送到后台,最后附加“ & ”。

要查看所有后台作业,您可以发布jobs

 jobs [1] + suspended nohup sh zookeeper-server-start.sh ../config/zookeeper.properties [2] running nohup sh kafka-server-start.sh ../config/server.properties [3] - running nohup sudo mongod --dbpath=/var/lib/mongodb 

在这里,我在后台运行3个工作:zookeeper,kafka和mongo daemon。 [1],[2]和[3]分别是这些任务的工号。

您可以使用fg %$taskNumber.将这些任务带到前台fg %$taskNumber.