Chinaunix首页 | 论坛 | 博客
  • 博客访问: 558841
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: LINUX

2015-03-12 12:28:38

trap命令用来捕捉特定信号,并且指定捕获该信号的行为。
格式:
      trap commands signals
SIGHUP会在以下3种情况下被发送给相应的进程:
1、终端关闭时,该信号被发送到和shell进程同一个进程组的进程。
2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程
3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。

点击(此处)折叠或打开

  1. #!/bin/bash

  2. count=1
  3. cat /dev/null > ~/test/shell/signal/wgw_hup
  4. cat /dev/null > ~/test/shell/signal/recv_hup
  5. trap "echo 'SIGHUP signal' > ~/test/shell/signal/wgw_hup" SIGHUP
  6. while [ $count -le 10 ]
  7. do
  8.     echo "Loop #$count" >> ~/test/shell/signal/recv_hup
  9.     sleep 5
  10.     count=$[ $count + 1 ]
  11. done

  12. echo "exiting....." >> ~/test/shell/signal/recv_hup



1.执行脚本
   sh sighup.sh
  操作:关闭终端
  结果:         

点击(此处)折叠或打开

  1. gwwu@hz-dev2.wgw.com:~/test/shell/signal>more recv_hup
  2. Loop #1
  3. Loop #2
  4. Loop #3
  5. Loop #4
  6. Loop #5
  7. Loop #6
  8. Loop #7
  9. Loop #8
  10. Loop #9
  11. Loop #10
  12. exiting.....
  13. gwwu@hz-dev2.wgw.com:~/test/shell/signal>more wgw_hup
  14. SIGHUP signal

点击(此处)折叠或打开

  1. gwwu@hz-dev2.wgw.com:~/test/pipe>ps -ef | grep sighup
  2. gwwu 8175 7943 0 11:18 pts/16 00:00:00 sh sighup.sh
  3. gwwu 8184 30681 0 11:18 pts/7 00:00:00 grep sighup
  4. gwwu@hz-dev2.wgw.com:~/test/pipe>ps -ef | grep sighup-----------关闭终端后,原先的进程变成daemon进程。
  5. gwwu 8175 1 0 11:18 ? 00:00:00 sh sighup.sh
  6. gwwu 8189 30681 0 11:18 pts/7 00:00:00 grep sighup


2. 执行脚本
  sh sighup.sh &
  操作:关闭终端
  结果: 

点击(此处)折叠或打开

  1. gwwu@hz-dev2.aerohive.com:~/test/shell/signal>more recv_hup
  2. Loop #1
  3. Loop #2
  4. Loop #3
  5. Loop #4
  6. Loop #5
  7. Loop #6
  8. Loop #7
  9. Loop #8
  10. Loop #9
  11. Loop #10
  12. exiting.....
  13. gwwu@hz-dev2.aerohive.com:~/test/shell/signal>more wgw_hup
  14. SIGHUP signal



gwwu@hz-dev2.wgw.com:~/codes/istanbul_2_9>ps -ef | grep sighup
gwwu     26204 23029  0 11:21 pts/3    00:00:00 sh sighup.sh
gwwu     26245 26218  0 11:21 pts/6    00:00:00 grep sighup
gwwu@hz-dev2.wgw.com:~/codes/istanbul_2_9>ps -ef | grep sighup----------关闭终端后shell进程仍然存在
gwwu     26204     1  0 11:21 ?        00:00:00 sh sighup.sh
gwwu     26249 26218  0 11:21 pts/6    00:00:00 grep sighup
gwwu@hz-dev2.wgw.com:~/codes/istanbul_2_9>ps -ef | grep sighup
gwwu     26204     1  0 11:21 ?        00:00:00 sh sighup.sh
gwwu     26251 26218  0 11:21 pts/6    00:00:00 grep sighup

3.将脚本中的trap行去掉

点击(此处)折叠或打开

  1. #!/bin/bash

  2. count=1
  3. cat /dev/null > ~/test/shell/signal/wgw_hup
  4. cat /dev/null > ~/test/shell/signal/recv_hup
  5. while [ $count -le 10 ]
  6. do
  7.     echo "Loop #$count" >> ~/test/shell/signal/recv_hup
  8.     sleep 5
  9.     count=$[ $count + 1 ]
  10. done

  11. echo "exiting....." >> ~/test/shell/signal/recv_hup
执行sh sighup.sh 和sh sighup.sh &
关闭终端后进程直接退出

执行nohup sh sighhup.sh
关闭终端后进程仍然执行,直到进程结束。
阅读(1195) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~