shell指令碼臨時檔案產生和使用,訊號捕捉

來源:互聯網
上載者:User

標籤:bin   --   manage   init.d   shell   ping   $$   signal   logs   

 

執行個體:產生臨時檔案記錄apache進程號,殺死apache進程,刪除臨時檔案

  1 #!/bin/bash   2 #create_log.sh  3               4 #1.擷取到所有httpd應用程式的進程號        5 #2.把進程號存入一個臨時檔案中             6 #3.從臨時檔案中取出所有的apache的進程號   7 #4.使用for迴圈用kill殺掉所有的httpd進程   8 #5.刪除之前產生的臨時檔案     9 #6.輸出關閉進程後的訊息      10 #$$當前程式運行時候開闢的pid 11              12 tmpfile=$$.txt               13              14 ps -e | grep httpd | awk ‘{print $1}‘ >>$tmpfile 15              16 for pid in `cat $tmpfile`    17 do           18         echo "apache ${pid} is killed!!!" 19         kill -9 $pid         20 done         21              22 sleep 1      23              24 rm -rf $tmpfile              25 echo "apache 已經成功被關閉"

 

 

[[email protected] shell_test]# /etc/init.d/httpd restart

Stopping httpd: [ OK ]Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName[ OK ]

 

[[email protected] shell_test]# ps -e | grep httpd

78797 ? 00:00:00 httpd78800 ? 00:00:00 httpd78801 ? 00:00:00 httpd78802 ? 00:00:00 httpd78803 ? 00:00:00 httpd78804 ? 00:00:00 httpd78805 ? 00:00:00 httpd78806 ? 00:00:00 httpd78807 ? 00:00:00 httpd

 

[[email protected] shell_test]# sh create_log.sh

apache 78797 is killed!!!apache 78800 is killed!!!apache 78801 is killed!!!apache 78802 is killed!!!apache 78803 is killed!!!apache 78804 is killed!!!apache 78805 is killed!!!apache 78806 is killed!!!apache 78807 is killed!!!apache 已經成功被關閉

 

[[email protected] shell_test]# ps -e | grep httpd
[[email protected] shell_test]#

 

訊號類型

linux中一共有64種訊號

[[email protected] shell_test]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

 

SIGHUP :掛起進程【1】  重載設定檔:kill -HUP +進程號 , kill -1 , pkill -HUP + 進程名字

SIGINT :來自鍵盤的中斷ctrl+c【2】

SIGQUIT :從鍵盤退出ctrl+\【3】

SIGKILL :無條件終止【9】

 

Trap訊號捕捉

捕捉到一個訊號後,它可能會採取下面三種操作之一:

1.不採取任何行動,由系統來處理

2.捕捉訊號,但忽略它

3.捕捉該訊號,但採取相應的行動

Trap命令使用:

trap "function" signal

1)signal為接受到的訊號

2)function為執行函數(動作)

 

常見行動:

  1)清除臨時檔案

  2)忽略該訊號

  3)詢問使用者是否終止指令碼執行

 

trap訊號捕捉

1 #!/bin/bash2 #signal.sh3 #訊號捕捉4 5 trap ‘myfunc‘ 26 7 function myfunc(){8    echo ‘你正在按ctrl+c鍵,程式無法終止‘9 }10 11 i=012 13 while :14 do15    let i++16    echo $i17   sleep 118 done

 

[[email protected] shell_test]# sh signal.sh
1
2
3
4
5
6
7
^C你正在按ctrl+c鍵,程式無法終止
8
9
^C你正在按ctrl+c鍵,程式無法終止
10
11
12
^C你正在按ctrl+c鍵,程式無法終止
13
14
^C你正在按ctrl+c鍵,程式無法終止
15
^C你正在按ctrl+c鍵,程式無法終止
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Killed

在開啟一個視窗,殺死指令碼進程,以終止

Last login: Sat Apr 15 02:27:19 2017 from 172.30.1.21
[[email protected] ~]# ps -ef | grep signal
root 260 2 0 Apr14 ? 00:00:00 [scsi_eh_0]
root 261 2 0 Apr14 ? 00:00:00 [scsi_eh_1]
root 284 2 0 Apr14 ? 00:00:00 [scsi_eh_2]
root 1472 1 0 Apr14 ? 00:00:01 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
root 2849 2767 0 Apr14 ? 00:00:00 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
gdm 2958 1 0 Apr14 ? 00:00:00 /usr/bin/dbus-launch --exit-with-session
root 3131 3021 0 Apr14 ? 00:00:00 gnome-session
root 3139 1 0 Apr14 ? 00:00:00 dbus-launch --sh-syntax --exit-with-session
root 3140 1 0 Apr14 ? 00:00:00 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
zabbix 72407 72387 0 01:25 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_server: housekeeper [deleted 0 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 0.002925 sec, idle for 1 hour(s)]
root 80834 4904 0 03:30 pts/0 00:00:00 sh signal.sh
root 80872 80807 0 03:30 pts/2 00:00:00 grep signal


[[email protected] ~]# kill -9 80834

 

trap訊號捕捉升級版

 1 #!/bin/bash 2 #signal.sh 3 #訊號捕捉 4 #與使用者進行互動 5  6 trap ‘myfunc‘ 2 7  8 function myfunc(){ 9   read -p ‘您確定終止該進程嗎? yes or no:‘ s10 11   case $s in12     ‘yes‘)13       exit14       ;;15     ‘no‘)16       ;;17     *)18       myfunc19       ;;20 21   esac22 }23 24 i=025 26 while :27 do28   let i++29   echo $i30   sleep 131 done

 

 

選擇yes直接終止

[[email protected] shell_test]# sh signal.sh
1
2
3
^C您確定終止該進程嗎? yes or no:yes

 

選擇no繼續往下走,選擇其他,調用函數,繼續提示是否終止進程

[[email protected] shell_test]# sh signal.sh
1
2
^C您確定終止該進程嗎? yes or no:no
3
4
5
6
^C您確定終止該進程嗎? yes or no:1
您確定終止該進程嗎? yes or no:2
您確定終止該進程嗎? yes or no:3
您確定終止該進程嗎? yes or no:yes
[[email protected] shell_test]#

 

shell指令碼臨時檔案產生和使用,訊號捕捉

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.