当前位置:首页>Linux>Linux脚本控制(一)——信号处理

Linux脚本控制(一)——信号处理

  • 2026-09-06 05:03:49
Linux脚本控制(一)——信号处理
Linux系统中脚本运行方式有多种,通过对脚本进行不同方式的控制实现不同需求的运行需求,常用的脚本控制方式有向脚本发送信号、修改脚本的优先级、切换脚本的运行模式等,本章内容首先介绍Linux系统信号处理内容。
01
Linux系统信号
Linux系统利用信号与系统中的进程进行通信,通过对脚本编程实现其收到特定信号时执行某些命令从而控制shell脚本的操作。
常见Linux信号如下所示(Linux系统及应用程序可共有61个信号:1~31为普通信号,34~64为实时信号,0、32、33不使用):
  • 1——SIGHUP——挂起进程(1代表信号,值为SIGHUP)
  • 2——SIGINT——中断进程
  • 3——SIGQUIT——停止(stop)进程
  • 9——SIGKILL——无条件终止(terminate)进程
  • 15——SIGTERM——尽可能终止进程
  • 18——SIGCONT——继续运行停止的进程
  • 19——SIGSTOP——无条件停止,但不终止进程
  • 20——SIGSTP——停止或暂停,但不终止进程
注:以上数字代表信号,英文字符代表其值。
例如,当系统收到SIGINT信号,则shell会被中断,Linux内核将不再为shell分配CPU处理时间。
02
产生信号
通常可使用键盘上的组合键来生成一些Linux信号,方便使用者处理失控脚本。
中断进程
Ctrl+C组合键会生成SIGINT信号,并将其发送给当前在shell中运行的所有进程。
暂停进程
Ctrl+Z组合键生成SIGTSTP信号,停止shell中运行的任何进程(停止进程让程序继续驻留在内存中,还能从上次停止的位置继续运行)
03
捕获信号
trap命令可以指定shell脚本需捕获的Linux信号,用于侦测或拦截,指定时可用信号名或值,如果脚本收到了trap命令中列出的信号,则该信号不再由shell处理,而是由本地处理。
用法如下:
trap commands signals
commands部分列出想要shell执行的命令,在signals部分列出想要捕获的信号(空格分开,使用信号值或信号名),使用示例如下:
trap "echo 'Sorry!I have traped ctrl+c'"  SIGINT
脚本中该语句代表在脚本运行过程中,如果用户输入Ctrl+C组合键,即产生中断信号,脚本会拦截该信号并输出echo命令语句,程序会继续运行。
04
捕获脚本退出
shell脚本也可以在shell脚本退出时捕获信号,方便用于shell完成任务时执行命令,用法如下:
trap "echo bye ..." EXIT
当脚本运行到退出位置时,触发了EXIT信号,并执行了trap中指定的命令,显示输出内容。
05
修改信号捕获
可在脚本的不同位置进行不同的信号捕获处理,用于实现不同的信号处理方式,如果信号是在捕获被修改前接收的,则脚本仍然会根据原先的trap命令处理该信号。
在shell会话中可使用trap -p命令查看被捕获的信号。
06
移除信号捕获
移除已设置好的信号捕获方法如下:
trap --SIGINT
或
trap -SIGINT 
trap命令与信号之间使用单连字符或双连字符均可移除信号捕获,即恢复信号的默认行为。

最新文章

随机文章