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