将nohup工作带到前台
考虑以下nohup
执行:
nohup script.sh > script.out &
有没有办法注销终端,重新连接,将进程恢复到前台并使用键盘与其进行交互?
如果你想要启动一个脚本,让它在没有输出困扰你的终端的情况下运行,然后在以后与它进行交互,你可能需要看一下终端多路复用器。 根据您的系统,我建议使用tmux
或screen
。 您可以在以下链接中找到有关如何使用它们的一些信息:
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.