Answers:
如果您想启动一个脚本,使其运行而输出不会打扰您的终端,然后在以后启动它以与之交互,您可能想看看终端多路复用器。根据您的系统,我建议tmux
或screen
。您可以在下面的链接中找到一些有关如何使用它们的信息:
tmux:
屏幕:
编辑:添加了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 &
fg
即使使用,也可以使用bash将后台作业恢复到前台nohup
。但这不会更改输出重定向,该重定向仍将转到filenohup.out
。
$ fg
nohup ./script.sh
如果关闭外壳程序/终端或注销,则命令不再是该外壳程序的子级。它属于init
process。如果您进行搜索,pstree
您会发现它现在归进程1(init
)所有。由于前台已不存在,因此无法将其带回前台。
If the command jobs cannot find it, then it is no longer a child process of that shell.
这是错误的:请尝试按以下顺序查看操作方法:sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
。生成此命令后,您仍会看到sleep
使用它生成的相同PID的工作,而jobs
不会打印任何内容。子进程不能停止成为子进程的唯一方法是失去其父进程(然后,孤儿成为的子进程init
)或分叉+退出(但PID更改,因此它不是原始的子进程)。
我将第二次使用终端多路复用器,但使用tmux而不是screen。出于所有目的和目的,该屏幕均未维护。它的配置是一门黑暗的艺术,可能最早记录在《死灵书》的附录中。尝试编写自己的配置是对Cthulu的一瞥。说真的 看看人们的.screenrc文件。可以肯定的是,有一些方法可以调解屏幕对配置文件的憎恶。Byobu作为致命用户和邪恶代码之间的面纱,表现出色。它带有明智的颜色,菜单界面,以及也许最重要的是状态栏。
但正如我所说,我建议改用tmux。它仍然需要一些小的配置,但是有据可查,并且您的配置文件不会看起来很乱。同样,您从颜色和状态栏开始。比较我的screenrc和tmux.conf文件:
可以将任何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.