zoukankan      html  css  js  c++  java
  • linux命令行与shell脚本编程 -----15控制脚本

    常见的Linux系统信号

    信号 描述
    1 SIGHUP 挂起进程
    2 SIGINT 终止进程
    3 SIGQUIT 停止进程
    9 SIGKILL 无条件终止进程
    15 SIGTERM 可能的话终止进程
    17 SIGSTOP 无条件停止进程,但不是终止进程
    18 SIGTSTP 停止或暂停进程,但不终止进程
    19 SIGCONT  继续运行停止的进程

    1.终止信号

    ctrl+C生成SIGINT信号,并将其发送给shell中当前运行的所有进程。

    2.暂停进程

    CTRL+Z生成SIGTSTP信号,停止shell中运行的任何进程。

    停止进程和终止进程不同,停止进程会让程序继续保留在内存中,并能从上次停止的位置继续运行。

    当你用CTRL+Z组合键时,shell会通知你进程已经被停止了。

    liuxj@liuxj-Lenovo:~/shell_test$ sleep 100
    ^Z
    [1]+  已停止               sleep 100

    方括号中的数字是shell分配的作业号,shell将shell中运行的每个进程称为作业,并为每个作业分配一个唯一的作业号。

    知道作业的PID号,可以利用kill命令来发送SIGKILL信号来终止它:

    kill -9 2069

    3。捕捉信号

    trap允许你指定shell脚本要观察哪些Linux信号并从shell中拦截。如果脚本中收到trap命令列出的信号,它会阻止它被shell处理,而在本地处理它。

    trap commands signals

    你可以用数值或者Linux信号名来指定信号。

    trap "echo  ' Sorry! I have trapped Ctrl -C'" SIGINT SIGTERM
    echo  This is a test program
    count=1
    while [ $count -le 10 ]
    do 
        echo "LOOP #$count"
        sleep 5
        count=$[ $count + 1 ]
    done
    echo This is the end of the test program

    本例中用到的trap命令会在每次检测到SIGINT或者SIGTERM信号时显示一行简单的文本消息。

    4.捕捉脚本的退出

    要捕捉shell脚本的退出,只要在trap命令后加上EXIT信号就行:

    #!/bin/bash
    trap "echo byebye" EXIT
    count=1
    while [ $count -le 5 ]
    do
         echo "loop #$count"
         sleep 3
         count=$[$count + 1 ]
    done

    当脚本运行到常规的退出点时,捕捉就被触发了,shell会执行你在trap命令行指定的命令。

    EXIT捕捉即使是在提前退出脚本时也会工作。

  • 相关阅读:
    jQuery弹出层插件大全:
    JavaScript数组去重的几种方法
    sql去除重复列(行)
    VS无法启动调试
    .将DayOfWeek转换成中文的几种方式
    关于 uniqueidentifier
    链接服务器
    我的目标:系统架构师
    异常(1)
    Visual C++开发工具与调试技巧整理
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/6341568.html
Copyright © 2011-2022 走看看