将 nohup 任务置于前台

将 nohup 任务置于前台

考虑以下nohup执行:

nohup script.sh > script.out &

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

答案1

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

nohup不会自动将其运行的命令置于后台。必须通过在命令行末尾添加 来明确执行此操作&

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

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

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

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

$ fg
nohup ./script.sh

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

答案2

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

tmux:

屏幕:

编辑:添加了 tmux 入门链接

答案3

我赞成使用终端多路复用器,但是tmux,而不是 screen。Screen 基本上无人维护。它的配置是一门黑暗艺术,很可能最早记载在《死灵之书》的附录中。尝试编写自己的配置就像是一瞥克苏鲁。说真的。看看周围的人.screenrc 文件可以肯定的是,有办法调解屏幕对配置文件的厌恶。屏风它出色地充当了普通用户和不正当代码之间的屏障。它具有合理的颜色、菜单界面,也许最重要的是状态栏。

但正如我所说,我建议tmux相反。它仍然需要一些小配置,但它是有据可查,您的配置文件看起来不会像乱码。此外,您从颜色和状态栏开始。比较我的 screenrc 和 tmux.conf 文件:

答案4

任何 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.

相关内容