让进程在linux后台运行
场景
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?
使用linux终端时,有些命令希望在后台运行,不占用终端界面。例如耗时长的任务,或者守护进程等。
&
在命令后面加上& 实现后台运行,例如
1 | sh test.sh & |
如果放在后台运行的作业会产生大量的输出,可以输出重定向到某个文件中:
1 | command > out.file 2>&1 & |
当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。
1 | ps -ef | grep 8153 |
nohup
当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,可以让进程忽略 HUP 信号。
nohup与&区别
使用&命令后,作业被提交到后台运行,一但把当前控制台关掉(退出帐户时),作业就会停止运行。
nohup命令可以在你退出帐户之后继续运行相应的进程。
nohup就是不挂起的意思( no hang up)。
使用方法
- 输入命令:
1
nohup command &
- 回车,使终端回到shell命令行;
- 输入exit命令退出终端:exit
nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行;
“&”可以让你的命令在后台运行
可以输出重定向
1 | nohup command > myout.file 2>&1 & |
注意
使用了nohup
之后,有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。
所以在使用nohup
命令后台运行命令之后,需要使用exit
正常退出当前账户,这样才能保证命令一直在后台运行
ctrl+z, ctrl+c
ctrl+z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
ctrl+c
终止前台命令
jobs
查看当前有多少在后台运行的命令jobs -l
选项可显示所有任务的PID
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 螃蟹壳!