Biorąc pod uwagę ten program hack.c:bash trap TERM - co robię źle?
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
i ten hack.sh skryptu bash:
#!/bin/bash
./hack
Jeśli biegnę hack.sh dwa procesy uzyskać utworzony - jeden dla bash, jeden dla C zadanie. Jeśli sygnał TERM zostanie wysłany do procesu basha, proces C nie zostanie uszkodzony.
Załóżmy teraz, że oryginalne bash zostało uruchomione z programu Java za pomocą Runtime.exec(), więc jedyną kontrolką, którą mam nad nim jest Process.destroy() (które wysyła TERM do procesu bash)? Załóżmy, że I chce proces C umrzeć wraz z bash, który go uruchomił?
Próbowałem rzeczy jak to w bash:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
tj klauzuli pułapkę, że łapie sygnał TERM je i przesyła do całej grupy procesów. To nie działa dla mnie - proces bash z tą klauzulą pułapki w nim ignoruje sygnały TERM.
Czego mi tu brakuje?
Strona man basha mówi: Jeśli bash czeka na wykonanie polecenia i odbiera sygnał, dla którego ustawiono pułapkę, pułapka nie zostanie wykonana, dopóki polecenie nie zostanie wykonane. – tangens
Czy próbowałeś używać 'exec' zamiast utrzymywania przy życiu procesu powłoki? –
Masz rację, stwory. Moją jedyną wymówką jest to, że tekst znajduje się w sekcji SYGNAŁY, powyżej dokumentacji pułapki. Dzięki! –