hallo,
die Vorschlag über trap das signal abzufangen ist glaube ich der richtige
Weg. Als Aktion müßte da ein kill des
im Skript aufgerufenen Propgramms stehen. Das Von dem Programm nicht die
PID habe und auch nicht weiß
wie ich sie bekomme ohne das Programm in den Hintergrund zu schicken, bin
ich nicht weitergekommen.
Ich habe jetzt den Aufruf des Programm direkt ohne Skript gemacht und
hinter dem kill() noch ein waitpid()
eingebaut und es funktioniert. Da ich aber sonst auch mit Skripten arbeite
bin ich weiterhin an eine Lösung interessiert.
Insbesondere stellt sich mir die Frage, gibt es eine Möglichkeit ein signal
an child prozesse zu schicken, ohne
deren PID zu kennnen?
Hier das Skript:
#!/bin/bash
# file: startx.sh
export SODA="/usr/soda"
export PATH="/usr/soda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/soda/lib"
xscall "$@"
Wenn dies Skript gekillt wird, läuft das Programm xscall weiter. Schön wäre
es wenn nach dem Abfangen eines signals,
dies an das Programm xscall weiergegeben werden könnte.
Gruß
Bernard
Johanns Schneider
lothar.behrens@lollisoft.de schrieb:
Am 31 Jan 2006 um 9:21 hat Bernard.Bramlage@kisters.de geschrieben:
Vielleicht hilfts:
## install trap for automatic deletion of TMPFILE and MSGFILE at ## SIGEXIT (0) see 'man bash' and all other signals. The trap for ## SIGKILL (9) is ignored though, of course. See 'help trap'. trap "rm -f \"$TMPFILE\"; rm -f \"$MSGFILE\";" `seq 0 63`
Lothar
Hallo, ich habe folgende Situation. Ein C++ Programm ruft mit execve ein Bash Skript auf und wartet mit waitpid() auf die normale Beendigung. Wenn
die
Ausführung des Skriptes zu lange dauert, soll es mit kill(pid, SIGKILL) beendet werden. Das Skrpt selber ruft wieder ein C++Programm auf. Jetzt ensteht folgende Situation. Nach dem kill() geht das Skript in den Status defunct und das vom Skript aufgerufene Programm läuft normal weiter. Hierzu jetzt 2 Fragen: Wie kann ich erreichen, dass auch das vom Skript aufgerufene Programm beendet wird, also das kill() quasi weitergegebe wird? Wir verhindere ich, dass das Skript in defunct geht? Ich muss wahrscheinlich nach kill nochmal waitpid() aufrufen, möcht hier aber nicht ewig warten müssen.
Vielen Dank im voraus für eure Hilfe.
Gruß Bernard
du kannst doch die pid des gestarteten programms ermitteln ($# glaub ich) versuch doch die an dein erstes programm zu übergeben und dann ggf kill(pid, ...); danach sollte sich das skript ja automatisch beenden, ansonsten musst du das skript noch anpassen
greatz Johannes
-- Es gibt 10 Arten von Menschen auf dieser Welt, die einen verstehen das Binärsystem und die anderen verstehen es nicht.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com