vivion27 发表于 2018-8-24 06:49:59

shell编程之一基础

# kill -l                  # 查看所有信号  
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
  
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
  
9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR2
  
13) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT
  
17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP
  
21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU
  
25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH
  
29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN
  
35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+338) SIGRTMIN+4
  
39) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8
  
43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+12
  
47) SIGRTMIN+1348) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-14
  
51) SIGRTMAX-1352) SIGRTMAX-1253) SIGRTMAX-1154) SIGRTMAX-10
  
55) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-6
  
59) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2
  
63) SIGRTMAX-164) SIGRTMAX
  

  
常见的信号
  
1)SIGHUP            # 让一个进程不用重启,就能重读其配置文件,并让其配置文件生效
  
2)SIGINT            # 中止信号,Ctrl+C发出的就是此信号
  
9)SIGKILL            # 强制杀死进程
  
15) SIGTERM            # 终止进程,kill默认的就为此信号
  
18) SIGCONT            # 当任务在后台终止时,使用bg命令其实就是发送此信号
  
19) SIGSTOP            # 运行某前台命令时,使用Ctrl+z其实就是发送此信号
  

  
SYNTAX       trap [-lp]
  

  
# cat ping.sh
  
#!/bin/bash
  
#
  

  
while :;do
  
ping -c 1 -W 1 172.16.1.3 &> /dev/null && echo "172.16.1.3 is up." || echo "172.16.1.3 is down."
  
done
  
# ./ping.sh
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
Killed
  
# ps aux | grep "bash"
  
root      92290.00.7663321844 pts/0    Ss   10:19   0:02 -bash
  
root   127340.00.6662241688 pts/1    Ss   15:54   0:00 -bash
  
root   128040.00.4638841100 pts/0    S+   15:55   0:00 /bin/bash ./ping.sh
  
root   128120.00.261216   736 pts/1    R+   15:55   0:00 grep bash
  
# kill -9 12804    # 一直ping,按Ctrl+c并不能取消,只能切换终端kill掉
  
# vim ping.sh
  
# cat ping.sh
  
#!/bin/bash
  
#
  
trap 'echo "quit";exit 3' SIGINT                  # 捕捉到SIGINT信号,则立即退出脚本
  

  
while :;do
  
ping -c 1 -W 1 172.16.1.3 &> /dev/null && echo "172.16.1.3 is up." || echo "172.16.1.3 is down."
  
done
  
# ./ping.sh
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
172.16.1.3 is down.
  
quit                                                # 当我按了Ctrl+c,也就是发送SIGINT信号,立马退出


页: [1]
查看完整版本: shell编程之一基础