【发布时间】:2013-12-04 21:26:05
【问题描述】:
我正在尝试与一个非常糟糕、完全不透明的 API 进行交互,该 API 在 C 中的类似 POSIX 的环境(OS X/Linux)中创建两个子进程。基本上,它启动一个外部程序并为传递消息提供基本支持来回。进程树看起来像这样:
+ My_program
\
+ an initiation shell script (csh -f -c external_program_startup_script)
\
- the external program instance
当我在 My_program 运行时在终端中按 control-c 时,控制终端将 SIGINT 发送到其进程组中的所有进程——以上三个进程。我想要 SIGINT 到达程序实例,但如果它也命中了 shell 脚本,那么中间进程将被终止并且通信链接被切断。
在My_program 中,我可以设置一个信号处理程序来忽略 SIGINT。但是我完全无法控制这两个子进程(API 甚至不公开它们的 PID),因此现有的解决方案(例如更改它们的进程组或附加处理程序)将不起作用。有没有办法阻止控制终端向前台进程组中的所有进程发送 SIGINT?
(有问题的 API 是 MATLAB's libeng,它允许外部 C 程序在 MATLAB 中处理命令。但它绝对没有发送超出操作系统提供的中断的功能。)
【问题讨论】:
-
我觉得我知道这个问题的答案在某个时候