Учитывая эту программу hack.c:
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
и этот bash-скрипт hack.sh:
#!/bin/bash
./hack
Если я запускаю hack.sh, создаются два процесса - один для bash, другой для задачи C. Если в процесс bash отправляется сигнал TERM, процесс C не пострадал.
Теперь предположим, что исходный bash был запущен из Java-программы с использованием Runtime.exec (), поэтому единственный элемент управления, который у меня есть, это Process.destroy () (который отправляет TERM процессу bash)? Предположим, я хочу , чтобы процесс C умер вместе с bash, который его запустил?
Я пробовал такие вещи в bash:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
т.е. предложение trap, которое ловит сигнал TERM и ретранслирует его всей группе процессов. Это не работает для меня - процесс bash с этим условием trap игнорирует TERM сигналы.
Что мне здесь не хватает?