gpt4 book ai didi

bash - 在 bash 中捕获 SIGINT,处理并忽略

转载 作者:行者123 更新时间:2023-11-29 08:42:55 28 4
gpt4 key购买 nike

在 bash 中是否有可能拦截 SIGINT,做一些事情,然后忽略它(保持 bash 运行)。

我知道我可以忽略 SIGINT

trap '' SIGINT

我还可以在信号上做一些事情

trap handler SIGINT

但是在 handler 执行后,脚本仍然会停止。例如

#!/bin/bash

handler()
{
kill -s SIGINT $PID
}

program &
PID=$!

trap handler SIGINT

wait $PID

#do some other cleanup with results from program

当我按下 ctrl+c 时,将向程序发送 SIGINT,但 bash 将跳过 wait 程序正确关闭并在其信号处理程序中创建其输出之前。

使用@suspectus answer 我可以将 wait $PID 更改为:

while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done

这实际上对我有用,我只是不能 100% 确定这是“干净的”还是“肮脏的解决方法”。

最佳答案

trap 将从处理程序返回,但调用处理程序时调用的命令。

所以这个解决方案有点笨拙,但我认为它可以满足要求。 trap handler INT 也可以工作。

trap 'echo "Be patient"' INT

for ((n=20; n; n--))
do
sleep 1
done

关于bash - 在 bash 中捕获 SIGINT,处理并忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785522/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com