Jusene's Blog

让脚本在后台飞

字数统计: 516阅读时长: 2 min
2017/04/16 Share

如何让脚本在退出终端的时候一直在运行?

  1. nohup在后台执行命令,忽略挂断信号。
  2. setsid让进程不属于接受hup信号的子进程
  3. screen提供一个分隔和重现连接一个会话的功能
  4. subshell子shell中运行

nohup

用法 nuhup command & 会把在command中的输出重定向到当前文件的nohup.out文件中

setsid

用法 setsid command

subshell

(command &) 在当前shell的子shell的后台运行

screen

重点需要说的,因为好用不麻烦。

screen -S session 创建一个新的会话窗口,并进入新会话,exit退出这个会话

1
~]# screen -S nohup

screen vi /etc/fstab 创建新的会话窗口来运行这个命令

1
~]#screen vim /etc/fstab
2
3
#
4
# /etc/fstab
5
# Created by anaconda on Sat Sep 17 15:44:12 2016
6
#
7
# Accessible filesystems, by reference, are maintained under '/dev/disk'
8
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
9
#
10
/dev/mapper/centos-root /                       xfs     defaults        0 0
11
UUID=bbcbd23f-8840-40ed-8ed8-126a08a6e79a /boot                   xfs     defaults        0 0
12
/dev/mapper/centos-home /home                   xfs     defaults        0 0
13
/dev/mapper/centos-swap swap                    swap    defaults        0 0
14
15
[screen is terminating]
16
退出这个文件也就退出了这个会话

ctrl+a+d 快捷键退出当前会话窗口,当时不终止这个窗口

screen -ls 查看会话窗口

1
~]#screen -ls
2
There is a screen on:
3
        1882.nohup      (Detached)
4
1 Socket in /var/run/screen/S-root.

screen -r 编号 恢复会话

1
~]#screen -r 1882
2
[root@www ~]#

screen -list 会显示该会话为dead状态
screen -wipe 命令清除该会话

ctrl+a+k 快捷键kill当前会话

会话共享,可以实现linux文本界面下的屏幕共享
screen -x 编号

1
~]# screen -x 1882

screen锁定 ctrl+a+s
解锁 ctrl+a+q
密码锁 ctrl+a+x

发送命令到screen会话

1
~]# screen -S jusene -X screen ping www.baidu.com
2
~]#screen -ls
3
There is a screen on:
4
        1939.jusene      (Detached)
5
1 Socket in /var/run/screen/S-root.
6
这个命令在一个叫做jusene的screen会话中创建一个新窗口,并在其中运行ping命令。
CATALOG
  1. 1. nohup
  2. 2. setsid
  3. 3. subshell
  4. 4. screen