Re: Bash - Exit Status von Hintergrundjobs ermitteln

Thomas Michalka <[email protected]> Fri, 29 Jan 2010 16:44:06 +0100
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Hallo Jan,


Jan Trippler schrieb:
> Moin,
> 
> Am Donnerstag, 28. Januar 2010 18:32:57 schrieb Thomas Michalka:
>> Ich möchte in einem Skript mehrere Hintergrundjobs nacheinander starten,
>> d.h. die Bash soll (zunächst) nicht warten, bis einer fertig ist,
>> sondern alle Jobs auf die Reise schicken und danach gleich wieder
>> weitere Anweisungen synchron ausführen. Weiter unten im Skript soll dann
>> jedoch auf die Rückkehr (die Beendigung) aller Jobs gewartet werden,
>> wobei die Rückgabewerte aller Hintergrundjobs ermittelt werden sollen.
> [...]
> 
> Hast Du Dir mal den Abschnitt "JOB CONTROL" in der bash-Manualpage zu Gemüte
> geführt? Unter anderem das Kommando "jobs" könnte helfen.

Habe ich, und folgende Passage hat mir zu denken gegeben, aber ich bin
mir nicht sicher, ob ich alles verstanden habe:

    "The shell learns immediately whenever a job changes state."

Ok, die Shell wacht über den Status ihrer Kindprozesse, bzw. den Status
des letzten Kindprozesses einer Pipe, richtig?

    "Normally, bash waits until it is about to print a prompt before
reporting changes in a job's status so as to not interrupt any other
output."

Gilt _nur_ für den Start eines Jobs aus einer Bash in einem Terminal.
Die Bash berichtet erst über den Status eines Jobs, wenn der Job fertig
ist *UND* wenn man (z.B. durch die Eingabetaste) einen neuen Prompt
anfordert, korrekt?

    "If the -b option to the set builtin command is enabled, bash
reports such changes immediately."

Das hilft mir aber in einem Skript, das vom crond gestartet wird, nicht
wirklich, denn hier gibt die Shell mangels Terminal ja keinen Promt aus.
Verstehe ich das richtig so?

    "Any trap  on  SIGCHLD is executed for each child that exits.

Das könnte interessant sein. Christian Boltz hat das gefunden - ich
jetzt auch ;-)


Gruß, Tom
-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]