让程序在后台运行
参考:
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
https://www.tecmint.com/create-new-service-units-in-systemd/
运行时把程序放入后台
参考https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html文章中提供了三种方法来使脚本能够在后台运行,不受当前tty的影响,从而在关闭当前tty时仍能继续运行。
实际使用的过程中,对于Centos7,生效的是后2种;第一种归属tty存在,使用jobs可以看到任务,通过fg可以把job拉到前台来,退出终端后进程退出了。
- 使用nohup去除tty断开时hangup信号的影响
nohup xxx.sh &
下面例子可以看到tty归属存在,ppid不为1,为tty持有,fg可以把命令拉到前台
[aaa@~/test]$ nohup ./a.out 28881 &
[aaa@~/test]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
aaa 17067 16713 0 18:39 pts/1 00:00:00 ./a.out 28882
[aaa@~/test]$ fg
nohup ./a.out 28884
- 使用setsid把进程的ppid设置为1,和tty无关
setsid xxx.sh 2>&1 > xxx.log
下面例子可以看到,用户tty不存在,ppid为1-进程被系统持有。
[aaa@~/test]$ setsid ./a.out 28882 2>&1 > a.log
[aaa@~/test]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
aaa 18048 1 0 18:58 ? 00:00:00 ./a.out 28882
[aaa@~/test]$ fg
-bash: fg: current: no such job
[aaa@~/test]$ (./a.out 28883 2>&1 > a.log &)
[aaa@~/test]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
aaa 18132 1 0 19:00 pts/1 00:00:00 ./a.out 28883
[aaa@~/test]$ fg
-bash: fg: current: no such job
另外还提到了disown -h %1修改已经启动job的方法,这个方法实验和hohup效果类似,不再叙述。
把程序做成服务
参考:https://www.tecmint.com/create-new-service-units-in-systemd/
这个暂未做测试,但是系统中有许多服务在后台运行,所以服务这种方式肯定会是可行的。
后续有空时把这中情况的测试补充上来。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)