在 Linux 上,是否有可能以某种方式在外部禁用程序的信号发送……也就是说,不修改它们的源代码?
语境:
我正在 Linux 上的 bash 脚本中调用 C(以及 Java)程序。我不希望我的 bash 脚本和脚本启动的其他程序(作为前台进程)有任何中断。
虽然我可以使用...
trap '' INT
...在我的 bash 脚本中禁用 Ctrl C 信号,这仅在程序控件恰好位于 bash 代码中时才有效。也就是说,如果我在 C 程序运行时按 Ctrl C,C 程序就会中断并退出!这个 C 程序正在执行一些关键操作,因此我不希望它被中断。我无权访问该 C 程序的源代码,因此 C 程序内部的信号处理是不可能的。
#!/bin/bash
trap 'echo You pressed Ctrl C' INT
# A C program to emulate a real-world, long-running program,
# which I don't want to be interrupted, and for which I
# don't have the source code!
#
# File: y.c
# To build: gcc -o y y.c
#
# #include <stdio.h>
# int main(int argc, char *argv[]) {
# printf("Performing a critical operation...\n");
# for(;;); // Do nothing forever.
# printf("Performing a critical operation... done.\n");
# }
./y
问候,
/HS