MST

星途 面试题库

面试题:Bash脚本多重trap及信号恢复处理

编写一个Bash脚本,其中需要捕获SIGTERM和SIGINT信号。当捕获到SIGTERM信号时,先输出一段信息表明正在优雅关闭,暂停5秒,然后恢复对SIGTERM信号的默认处理;当捕获到SIGINT信号时,输出提示用户使用SIGTERM信号优雅关闭的信息。请详细说明实现思路和脚本代码。
28.4万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用 trap 命令来捕获 SIGTERMSIGINT 信号,并指定对应的处理函数。
  2. 对于 SIGTERM 信号,定义一个函数,该函数先输出正在优雅关闭的信息,然后使用 sleep 暂停5秒,最后使用 trap - SIGTERM 恢复默认处理。
  3. 对于 SIGINT 信号,定义一个函数,输出提示用户使用 SIGTERM 信号优雅关闭的信息。

脚本代码

#!/bin/bash

# 处理SIGTERM信号的函数
handle_sigterm() {
    echo "正在优雅关闭..."
    sleep 5
    trap - SIGTERM # 恢复SIGTERM信号的默认处理
}

# 处理SIGINT信号的函数
handle_sigint() {
    echo "请使用SIGTERM信号优雅关闭。"
}

# 捕获SIGTERM信号
trap handle_sigterm SIGTERM

# 捕获SIGINT信号
trap handle_sigint SIGINT

# 模拟脚本运行,防止脚本立即退出
while true; do
    sleep 1
done