进一步阅读

进一步阅读

我在 C++ 程序中有一个信号处理程序:

void term(int signum)
{
    cout << "in term" << endl;
    # Do Stuff
    exit(0);
}

int main(int argc, char *argv[])
{
    # Do Stuff
    signal(SIGINT, term);
    # Do Stuff
}

该程序运行良好。当我按下Ctrl+C并退出时进入功能项。

但是,当我尝试使用脚本复制该行为时,它不起作用。

我正在运行的脚本的简化版本:

! /bin/bash
sudo ./program &
rpid=$!

sleep 2
sudo kill -INT $rpid
# sudo kill -TERM $rpid
# sudo kill $rpid

echo "killed"
wait $rpid

在我按 之前,该程序甚至不会进入术语功能Ctrl+C。它无限期地陷入等待状态。

答案1

% sudo sh -c 'exec echo 我的进程 ID 是 $$。' & echo "Xyr 进程 ID 是 $\!." ;等待
[1]59130
Xyr 进程 ID 为 59130。
我的进程 ID 是 59131。
[1] + 完成 sudo sh -c 'exec echo 我的进程 ID 是 $$。'
%

欢迎来到可插入身份验证模块的世界!loginsu、 和等程序sudo不再与目标程序重叠。

您正在向错误的进程发送信号。

进一步阅读

相关内容