linux后台运行任务


首先理解任务是如何中断的

当我们关闭终端,shell默认会发送中断信号给该终端session关联的进程,从而导致进程跟随终端退出。

两种中断信号:

1)sigint:signal interrupt,ctrl+c会发送此信号,主动关闭程序

2)sighup: signal hang up,关闭终端,ssh掉线,关闭屏幕会发送此挂断信号。

几种后台运行任务的方法:

1)&符号

将&符号放在命令最后面,使启动的程序忽略sigint信号,此时执行ctrl+c不会关闭进程,但当断网或关闭终端时,仍会造成进程退出。

例:bash test.sh &

2)nohup指令

nohup(no hang up),指不挂断运行,使用nohup在后台执行任务,和用户终端没有关系,所以断开ssh也不影响运行,nohup捕获了sighup信号,并做了忽略处理,因此断开终端不会关闭进程,但使用ctrl+c可以关闭该进程,所以一般用nohup+&结合使用。

例:nohup command

3)结合使用

方法1

nohup command &>> log.out &

方法2

su - root -c "command &>> log.out &"

4)运行后补救措施

当我们已经在前台开启了一个任务,想让其在后台运行,但又不想中断后重新开启该怎么办呢?

①将作业挂起

ctrl+z

②查看作业号

jobs

③将挂起的作业在后台运行

bg jobid

如果想继续放在前台运行:fg jobid