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