このhack.cプログラムを考えると:
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
そしてこのhack.shbashスクリプト:
#!/bin/bash
./hack
hack.shを実行すると、2つのプロセスが作成されます。1つはbash用、もう1つは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シグナルを無視します。
ここで何が欠けていますか?