zoukankan      html  css  js  c++  java
  • shell脚本学习总结12--系统信号

    信号是Linux系统中一种进程通信机制。我们可以使用特定的信号来中断进程。每一种信号都同一个整数值相关联。

    kill命令可用来想进程发送信号,而trap命令用来处理所接收的信号。

    kill

    列出所有可用的信号

    [root@LAMP ~]# 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
    63) SIGRTMAX-1    64) SIGRTMAX    

    经常用到的只有几个

    SIGHUP 1   ——   对控制进程或终端终结进行挂起检测。
    SIGINT 2   ——   Ctrl+C时发送该信号
    SIGKILL 9  ——   强杀进程
    SIGTERM 15 ——  默认终止进程
    SIGTSTP 20 —— Ctrl+Z时发送该信号

    用法,例如强杀httpd进程19421

    [root@LAMP ~]# kill -s SIGKILL 19421
    [root@LAMP ~]# kill -9 19421

    trap

    一旦trap将某个函数分配一个信号,当脚本运行收到相应的信号,就会执行相应的函数

    实例1:

    [root@localhost sbin]# vim demo_trap.sh 
    
    #/bin/bash
    function hander(){
            echo Hey,received signal : SIGINT
    }
    
    echo My process ID is $$
    trap 'hander' SIGINT
    
    while true;do
            sleep 1
    done

    Ps:死循环的作用是使进程一直处于活动状态。

    执行,并按Ctrl+C

    [root@localhost sbin]# sh demo_trap.sh 
    My process ID is 11756
    ^CHey,received signal : SIGINT

    实例2,生产环境用作于跳板机,使普通操作用户连接只能操作脚本

    [root@LAMP profile.d]# pwd
    /etc/profile.d
    [root@LAMP profile.d]# vim tiaoban.sh 
    
    function trapper(){
        trap ':' INT EXIT TSTP TERM HUP
    }
    if [ $UID -ne 0 ];then
    while true;do
        trapper
        clear
        echo [1] WEB Server
        echo "" echo [
    2] APP Server echo "" echo [3] DB Server echo "" echo [x] Exit echo "" read -p "Option: " nu case $nu in 1) ssh redhat@192.168.1.20 ;; 2) ssh appadmin@192.168.1.30 ;; 3) ssh oracle@192.168.1.40 ;; x) exit ;; *) echo "USAGE:[123x]" read -p "Press any key to continue." esac done fi

    当用普通用户登陆时,直接执行脚本,并按ctrl+c等命令都无法进入命令行



  • 相关阅读:
    weak引用变量是否线程安全
    VMware vSphere HyperVisor安装过程记录
    【转载】VMWare ESXi 5.0和vSphere Client安装和配置
    Wmware桥接网络虚拟机无法上网的问题
    虚拟机移动后重启网络时提示Device does not seem to be present
    Eclipse maven工程 Missing artifact com.sun:tools:jar:1.5.0:system 解决方法
    【转】使用JIRA搭建企业问题跟踪系统【个人推荐】
    使用XAMPP本地安装Wordpress博客
    【转载】维度表和事实表的区别
    maven工程的如何进行代码调试
  • 原文地址:https://www.cnblogs.com/zydev/p/5794143.html
Copyright © 2011-2022 走看看