鉴于这个 hack.c 程序:
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
还有这个 hack.sh bash 脚本:
#!/bin/bash
./hack
如果我运行 hack.sh,则会创建两个进程 - 一个用于 bash,一个用于 C 任务。如果 TERM 信号被发送到 bash 进程,则 C 进程不会受到伤害。
现在,假设原始 bash 是使用 Runtime.exec() 从 Java 程序启动的,那么我对它的唯一控制是 Process.destroy()(它将 TERM 发送到 bash 进程)?假设我希望C 进程与启动它的 bash 一起死掉?
我一直在 bash 中尝试这样的事情:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
即捕获 TERM 信号并将其重新广播到整个进程组的陷阱子句。这对我不起作用 - 带有该陷阱子句的 bash 进程会忽略TERM 信号。
我在这里想念什么?