在 Bash 个脚本中处理来自子进程的信号
Handling signals from child process in Bash Scripts
我正在尝试捕获子进程发出的信号。但是,我的陷阱回调函数从未被调用过。我有以下测试代码
#include <csignal>
#include <iostream>
#include <thread>
#include <chrono>
int main()
{
std::this_thread::sleep_for (std::chrono::seconds(5));
std::cout << ">>> Signal Sent!" << std::endl;
raise(SIGUSR1);
return 0;
}
还有这个bash脚本
set -bm
set -e
KEEP_GOING=true
sigusr1()
{
echo "SIGUSR1 Recieved"
KEEP_GOING=false
}
trap sigusr1 SIGUSR1
./signalTest &
while $KEEP_GOING ; do
sleep 1s
echo "Waiting for signal"
done
当我 运行 它时,我得到以下
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
>>> Signal Sent!
[1]+ User defined signal 1 ./signalTest
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
^C
从输出中我看到信号实际上已经发送,并且以某种方式被接收。但是我的陷阱中的回调函数没有执行。
有什么想法吗?
我正在尝试捕获子进程发出的信号。但是,我的陷阱回调函数从未被调用过。我有以下测试代码
#include <csignal>
#include <iostream>
#include <thread>
#include <chrono>
int main()
{
std::this_thread::sleep_for (std::chrono::seconds(5));
std::cout << ">>> Signal Sent!" << std::endl;
raise(SIGUSR1);
return 0;
}
还有这个bash脚本
set -bm
set -e
KEEP_GOING=true
sigusr1()
{
echo "SIGUSR1 Recieved"
KEEP_GOING=false
}
trap sigusr1 SIGUSR1
./signalTest &
while $KEEP_GOING ; do
sleep 1s
echo "Waiting for signal"
done
当我 运行 它时,我得到以下
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
>>> Signal Sent!
[1]+ User defined signal 1 ./signalTest
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
Waiting for signal
^C
从输出中我看到信号实际上已经发送,并且以某种方式被接收。但是我的陷阱中的回调函数没有执行。
有什么想法吗?