c++ - 在 Bash 脚本中处理来自子进程的信号

标签 c++ bash signals

我正在 try catch 子进程发出的信号。但是,我的陷阱回调函数从未被调用过。我有以下测试代码

#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

从输出中我看到信号实际上已经发送,并且以某种方式被接收。但是我的陷阱中的回调函数没有执行。

有什么想法吗?

最佳答案

raise将信号发送到调用线程。

kill向指定的进程或线程发送信号。

向父进程发送信号,而不是

raise(SIGUSR1);

#include <unistd.h>
// ...
kill(getppid(), SIGUSR1);

关于c++ - 在 Bash 脚本中处理来自子进程的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58416798/

相关文章:

bash - 在.env中使用空格设置变量

file - 复制包含在不同父文件夹中的许多文件(同名)

linux column 命令或其他——在输出前需要一些填充

python - Qt python 如何知道QPushButton发送了哪些信号?

c++ - 当通过原始套接字接收到 "syn ack"数据包时,如何使用 "syn"数据包进行响应?

c++ - 是否有任何 STL 实现支持 C++ 概念?

c++ - 多线程程序被中断 "Alarm Clock"

c - 一项剥夺子孙的计划

c++ - 短读错误-Boost asio同步https调用

c++ - 读取二进制文件