后台保持运行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中

posted on 2017-12-12 07:19  游荡的鱼  阅读(1156)  评论(0编辑  收藏  举报

导航