相关疑难解决方法(0)

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

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

我知道我可以忽略SIGINT

trap '' SIGINT
Run Code Online (Sandbox Code Playgroud)

我也可以用sigint做点什么

trap handler SIGINT
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash

handler()
{
    kill -s SIGINT $PID
}

program &
PID=$!

trap handler SIGINT

wait $PID

#do some other cleanup with results from program
Run Code Online (Sandbox Code Playgroud)

当我按下ctrl + c时,将发送SIGINT to program,但bash将跳过waitBEFORE程序正确关闭并在其信号处理程序中创建其输出.

使用@suspectus答案我可以wait $PID改为:

while kill -0 $PID > /dev/null 2>&1
do
    wait $PID
done
Run Code Online (Sandbox Code Playgroud)

这实际上对我有用我只是不是100%确定这是'干净'还是'肮脏的解决方法'.

bash

28
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×1