dieses hack.c Programm Gegeben:Bash Trap von TERM - was mache ich falsch?
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
und dieses hack.sh Bash-Skript:
#!/bin/bash
./hack
Wenn ich hack.sh laufen zwei Prozesse erstellt bekommen - eine für bash, eine für die C Aufgabe. Wenn ein TERM-Signal an den Bash-Prozess gesendet wird, ist der C-Prozess unversehrt.
Angenommen, die ursprüngliche Bash wurde von einem Java-Programm mit Runtime.exec() gestartet, so dass das einzige Steuerelement, über das ich es habe, Process.destroy() ist (was TERM an den Bash-Prozess sendet)? Angenommen, ich möchte den C-Prozess zusammen mit der Bash sterben, die es gestartet?
Ich habe Dinge wie diese in bash versuchen:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
das heißt eine Falle Klausel, die das TERM-Signal auffängt und es auf die gesamte Prozessgruppe neu aussendet. Dies funktioniert nicht für mich - ein Bash-Prozess mit dieser Trap-Klausel in ignoriert TERM-Signale.
Was fehlt mir hier?
Die man-Seite von bash sagt: Wenn bash auf den Abschluss eines Befehls wartet und ein Signal empfängt, für das ein Trap gesetzt wurde, wird der Trap erst ausgeführt, wenn der Befehl abgeschlossen ist. – tangens
Haben Sie versucht, 'exec' zu verwenden, anstatt den Shell-Prozess am Leben zu erhalten? –
Sie haben Recht, tangens. Meine einzige Entschuldigung ist, dass der Text im SIGNALS-Bereich liegt, weit über der Trap-Dokumentation. Vielen Dank! –