后台保持运行sceen setid nohub (&)
后台运行
意义:
当终端需要退出时,一般运行的脚本以及后台命令,会跟着终端注销而结束,有有几种保持后天的方法。
用户注销终端会收到 hangup 信号,然后会关闭在其上运行的子进程,
解决方法有两种:
1、 让执行得进程忽略HUP型号,
2、 让运行的进程不再属于需要退出的终端
注: (c+Z)ctrl+Z可以暂停任务然后 使用 bg %1 把该进程丢到后天运行,fg %1 把后台放在前台执行
nohub
忽略HUP信号来防止进程被中断
1、 nohub ping www.baidu.com > ping.txt 2>&1 & # 标准输出 标准错误 都会重定向到ping.txt文件中,并放入后台执行
nohup ping www.baidu.com & #默认标准输出和标准错误重定向到nohup.out文件中
setsid
setsid 使进程不属于 正在运行的终端
正常后台运行:
[test@xujb01 ~]$ sleep 1000&
[1] 19848
[test@xujb01 ~]$ ps -ef | grep sleep
test 19848 2275 1 07:37 pts/4 00:00:00 sleep 1000
test 19850 2275 0 07:37 pts/4 00:00:00 grep --color=auto sleep
[test@xujb01 ~]$ ps
PID TTY TIME CMD
2275 pts/4 00:00:05 bash
19848 pts/4 00:00:00 sleep
19851 pts/4 00:00:00 ps
#可以看到sleep 进程属于 运行终端的子进程 19848 2275
更直观的观看:
[test@xujb01 ~]$ pstree
├─sshd───sshd───bash─┬─pstree
│ └─sleep
1、 setsid
使用setsid后:
setsid sleep 1000&
[test@xujb01 ~]$ ps -ef | grep sleep
test 19864 1 0 07:42 ? 00:00:00 sleep 10000
test 19868 2275 0 07:43 pts/4 00:00:00 grep --color=auto sleep
--------------
[test@xujb01 ~]$ pstree
├─sleep
├─sshd───sshd───bash───vi
├─sshd───sshd───bash───pstree
#运行的进程属于了pid 1
(command &)
(sleep 1000 &) #同样的此方法也是把该进程丢到后台并成为pid 1的子进程
[test@xujb01 ~]$ (sleep 1000 &)
[test@xujb01 ~]$ ps -ef | grep sleep
test 19880 1 0 07:48 pts/4 00:00:00 sleep 1000
test 19882 2275 0 07:48 pts/4 00:00:00 grep --color=auto sleep
disown
disown作业调度:当命令已经运行怎么把他变成不会随着终端注销而结束,使用disown
- disown -h %1 #使进程忽略HUP信号 (%1)和bg fg 方法一样,
- disown -ah #使所有作业忽略HUP信号
- disown -rh #使正在运行的作业忽略HUP信号
和nohup一样当终端结束后把进程丢到 pid 1中