如何使用命令trap来捕捉信号?

3个月前 (01-08 07:07)阅读4回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值227515
  • 级别管理员
  • 主题45503
  • 回复0
楼主

  第一种:

trap ""commands"" signal-list

当脚本收到signal-list清单内列出的信号时,trap号令施行双引号中的号令。

第二种:

trap signal-list

trap不指定任何号令,承受信号的默认操做。

  默认操做是完毕历程的运行。

第三种:

trap "" "" signal-list

trap号令指定一个空号令串,容许漠视信号。

Linux信号简介

1) SIGHUP 本信号在用户末端毗连(一般或非一般)完毕时发出, 凡是是在末端的掌握历程完毕时, 通知统一session内的各个功课, 那时它们与掌握末端不再联系关系。

2) SIGINT 法式末行(interrupt)信号, 在用户键进INTR字符(凡是是Ctrl-C)时发出

3) SIGQUIT 和SIGINT类似, 但由QUIT字符(凡是是Ctrl-\)来掌握。 历程在因收到SIGQUIT退出时会产生core文件, 在那个意义上类似于一个法式错误信号。

4) SIGILL 施行了不法指令。 凡是是因为可施行文件自己呈现错误, 或者试图施行数据段。 仓库溢出时也有可能产生那个信号。

5) SIGTRAP 由断点指令或其它trap指令产生。 由debugger利用。

6) SIGABRT 法式本身发现错误并挪用abort时产生。

7) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样。

8) SIGBUS 不法地址, 包罗内存地址对齐(alignment)出错。 eg: 拜候一个四个字长的整数, 但其地址不是4的倍数。

9) SIGFPE 在发作致命的算术运算错误时发出。

   不只包罗浮点运算错误, 还包罗溢出及除数为0等其它所有的算术的错误。

10) SIGKILL 用来立即完毕法式的运行。 本信号不克不及被阻塞, 处置和漠视。

11) SIGUSR1 留给用户利用

12) SIGSEGV 试图拜候未分配给本身的内存, 或试图往没有写权限的内存地址写数据。

13) SIGUSR2 留给用户利用

14) SIGPIPE Broken pipe

15) SIGALRM 时钟按时信号, 计算的是现实的时间或时钟时间。 alarm函数利用该信号。

16) SIGTERM 法式完毕(terminate)信号, 与SIGKILL差别的是该信号能够被阻塞和处置。

   凡是用来要求法式本身一般退出。 shell号令kill缺省产生那个信号。

17) SIGCHLD 子历程完毕时, 父历程会收到那个信号。

18) SIGCONT 让一个停行(stopped)的历程陆续施行。 本信号不克不及被阻塞。 能够用一个handler来让法式在由stopped形态变成陆续施行时完成特定的工做。

   例如, 从头展现提醒符

19) SIGSTOP 停行(stopped)历程的施行。 重视它和terminate以及interrupt的区别: 该历程还未完毕, 只是暂停施行。 本信号不克不及被阻塞, 处置或漠视。

20) SIGTSTP 停行历程的运行, 但该信号能够被处置和漠视。

   用户键进SUSP字符时(凡是是Ctrl-Z)发出那个信号

21) SIGTTIN 当后台功课要从用户末端读数据时, 该功课中的所有历程会收到SIGTTIN信号。 缺省时那些历程会停行施行。

22) SIGTTOU 类似于SIGTTIN, 但在写末端(或修改末端形式)时收到。

23) SIGURG 有告急数据或out-of-band数据抵达socket时产生。

24) SIGXCPU 超越CPU时间资本限造。 那个限造能够由getrlimit/setrlimit来读取/改动。

0
回帖

如何使用命令trap来捕捉信号? 期待您的回复!

取消