Gentoo Archives: gentoo-user-de

From: Thomas Schweikle <tps@××××××.de>
To: gentoo-user-de@l.g.o
Subject: [gentoo-user-de] Re: Bash-Skript Frage
Date: Sat, 20 Aug 2005 13:19:24
Message-Id: 1124543773.583312@hazel
In Reply to: Re: [gentoo-user-de] Re: Bash-Skript Frage by "Hendrik Jürgens"
1 Hendrik Jürgens schrieb:
2 > Thomas Schweikle wrote:
3 >>> Nils Andresen schrieb:
4 >>>
5 >>>>Moin,
6 >>>>
7 >>>>Volker Katz wrote:
8 >>>>
9 >>>>
10 >>>>>Also in der Art:
11 >>>>>
12 >>>>>/bin/job1 &
13 >>>>>/bin/job2 &
14 >>>>>/bin/job3 &
15 >>>>>while (not job1 finished && not job2 finished && not job3 finished)
16 >>>>>/bin/job4
17 >>>>>
18 >>>>>
19 >>>>
20 >>>>Macht
21 >>>>( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
22 >>>>nicht das ?!
23 >>>
24 >>>
25 >>> Nein, macht es nicht:
26 >>> - job 1 wird im Background ausgeführt
27 >>> - job 2 wird im Background ausgeführt
28 >>> - job 3 wird im Vordergrund ausgeführt
29 >>> nach *erfolgreichem* beenden von job 3 wird job 4 ausgeführt.
30 >>>
31 >>> Die Klammern um job 1 bis job 3 sorgen nur dafür, dass das Environment
32 >>> (bis auf den Rückgabewert) nicht verändert wird.
33 >>>
34 >>> (sleep 60 & sleep 60 & sleep 5) && echo "Fertig!"
35 >>> ps axf nach 0s:
36 >>> 13619 pts/1 Ss 0:00 \_ -/bin/bash
37 >>> 2846 pts/1 S+ 0:00 | \_ -/bin/bash
38 >>> 2847 pts/1 S+ 0:00 | \_ sleep 60
39 >>> 2848 pts/1 S+ 0:00 | \_ sleep 60
40 >>> 2849 pts/1 S+ 0:00 | \_ sleep 15
41 >>>
42 >>> ps axf nach 10s:
43 >>> 2847 pts/1 S 0:00 sleep 60
44 >>> 2848 pts/1 S 0:00 sleep 60
45 >>>
46 >>> ps axf nach 61s:
47 >>>
48 >
49 > Tach.
50 >
51 > Damit sollte das vielleicht so gehen. Die jobs 1-3 werden im Hintergrund
52 > ausgeführt. Ihre PIDs in den Variablen job1-3 gespeichert und danach auf
53 > das Beenden der Jobs gewartet, bevor job4 ausgeführt wird,
54 >
55 > #!/bin/bash
56 > job1 & job1=$!
57 > job2 & job2=$!
58 > job3 & job3=$!
59 > wait $job1
60 > wait $job2
61 > wait $job3
62 > job4
63 >
64 > wait $wmpid
65
66 Ja. nur gefällt mir die Variante aus
67 <20050816151216.GA32458@××××××××××××××.lan> besser. Ich würde hergehen
68 in das ganze in eine Schleife packen:
69
70 for i in job1 job2 job3 jobn; do
71 $i & pids="${pids} $!"
72 done
73 wait $pids
74 echo "Fertig!"
75
76 noch eleganter:
77
78 function waitjob() {
79 $* & pids="$pids $!"
80 }
81
82 waitjob job1
83 waitjob job2
84 waitjob jobn
85 wait $pids
86 echo "Fertig!"
87
88 --
89 Thomas
90
91 --
92 gentoo-user-de@g.o mailing list