Re: Abbrechen eines Programms, das in einem Bash Skript gestartet wird.

[email protected]
Newsgroups gmane.linux.suse.programming
Message-ID <OF7447E395.5B842BAF-ONC1257109.00558B6E-C1257109.005631A6@kisters.de>
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 <[email protected]> wrote on 02.02.2006 13:57:05:

> [email protected] schrieb:
> > Am 31 Jan 2006 um 9:21 hat [email protected] 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:
>     [email protected]
> Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
> Sie eine Mail an: [email protected]
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.