


信号概述与脚本中捕获的必要性 在Linux系统中,信号是一种进程间异步通信机制。当用户按下Ctrl+C、系统关机或进程异常终止时,内核会向相关进程发送信号。对于长时间运行的脚本,若未正确处理信号,可能导致临时文件残留、资源泄漏等问题。通过bash内置的trap命令,我们可以捕获特定信号并执行自定义清理逻辑,确保脚本即使在意外中断时也能优雅退出。 trap命令语法与基本示例 trap的语法如下: trap argument signal [signal ...] argument:当信号触发时执行的命令或字符串(可包含多条命令,用分号分隔)。 signal:信号名称(如SIGINT、SIGTERM)或编号。 下面是一个最简单的信号忽略示例: #!/bin/bash # trap-demo: simple signal handling demo trap "echo 'I am ignoring you.'" SIGINT SIGTERM for i in { 1..5}; do echo "Iteration $i of 5" sleep 5 done 运行后,用户按Ctrl+C(发送SIGINT)或执行kill命令发送SIGTERM时,脚本不会终止,而是打印消息后继续执行。 使用函数作为信号处理程序 将复杂逻辑直接写在trap的字符串参数中可读性较差,更常见的做法是定义一个函数来处理信号: