Prozesse per Batch 'verbinden'

Hallo

Aus einem Bash-Script möchte ich:

  1. X ein Programm starten
  2. Firefox starten (z.B mit firefox http://www.wer-weiss-was.de)
  3. Wenn das erst gestartete Programm geschlossen wird, soll auch gleich Firefox geschlossen werden
  4. Wenn Firefox geschlossen wird, soll das erst gestartete Programm offen bleiben

Geht das? Wie stelle ich es an (Parent/Child/Firefox … irgendwie)?

Danke für die Hilfe

Gruss
Olli

================================
#!/bin/bash
mein_programm &
PROGRAM_PID=$$
firefox http://www.google.de/
FIREFOX_PID=$$
wait PROGRAM_PID
kill FIREFOX_PID
exit 0

Das startet das Programm und Firefox, speichert die PIDs, wartet dann bis dein Programm beendet wurde und killt dann auf gut Glück Firefox.

-nik

Hi nik,
wolltest du nicht anstatt $$ eigentlich die Variable $! (PID of last job run in background) nehmen?

russ
bernhard

Das startet das Programm und Firefox, speichert die PIDs,
wartet dann bis dein Programm beendet wurde und killt dann auf
gut Glück Firefox.

PIDs können doch wiederverwendet werden, wenn das Programm geschlossen wurde, oder? Also könnte es sein, dass gar nicht Firefox gekillt wird, sondern ein anderer Prozess, der mittlerweile dieselbe PID hat, nachdem Firefox schon Stunden zuvor geschlossen wurde.

Sebastian.

PIDs können doch wiederverwendet werden, wenn das Programm
geschlossen wurde, oder? Also könnte es sein, dass gar nicht
Firefox gekillt wird, sondern ein anderer Prozess, der
mittlerweile dieselbe PID hat, nachdem Firefox schon Stunden
zuvor geschlossen wurde.

Dann könnte man anstelle von kill PID auch ein killall firefox-bin absetzen.

Gruss
Schorsch

Hallo.

PIDs können doch wiederverwendet werden, wenn das Programm
geschlossen wurde, oder? Also könnte es sein, dass gar nicht
Firefox gekillt wird, sondern ein anderer Prozess, der
mittlerweile dieselbe PID hat, nachdem Firefox schon Stunden
zuvor geschlossen wurde.

Dann könnte man anstelle von kill PID auch ein killall
firefox-bin absetzen.

Was dann auch alle Firefox-Prozesse schließen würde, die nicht über das Skript gestartet wurden. Aber eine von beiden Varianten sollte wohl für den Anwendungsfall ausreichend sein.
Wenn nicht, könnte man noch eine Überprüfung machen, ob die PID zu einem Firefox-Prozess passt. Aber selbst das wäre ja noch nicht absolut sicher.

Sebastian.

Guten Morgen

Danke für die Antworten und interessanten Tipps. Dominiks Script mit Bernhards $! funktioniert soweit ganz gut.

Aber eben, ob dann wirklich Firefox gekillt wird ist fraglich … deshalb meinte Dominik wohl:

und killt dann auf gut Glück Firefox.

Gibt es eine Möglichkeit das Ganze per X zu verbinden? Gebe ich $ firefox -help auf der Konsole ein steht das was von –sync Make X calls syncronus … hä?

Kann ich da irgendwie die Xt callbacks weiterleiten, z.B. den „destroy callback“ wenn [X] oben rechts geklickt wird?

Bsp:

#!/bin/bash
xclock &
# … Voodoo X callback nach irgendwo … verbinden?
firefox http://www.google.de &
# … Voodoo X callback von irgendwo … verbinden?

Oder lässt sich eventuell etwas mit dcop machen?

Gruss
Olli

Das wäre dann Pech. Aber ist unwahrscheinlich :smile:

Hi nik,
wolltest du nicht anstatt $$ eigentlich die Variable $! (PID
of last job run in background) nehmen?

Nein. Ich wollte hinter den Firefox-Aufruf noch ein & setzen, und dann mit $$ die PID des letzten Jobs im Hintergrund nehmen.

-nik

Hi -nik,

Nein. Ich wollte hinter den Firefox-Aufruf noch ein & setzen,
und dann mit $$ die PID des letzten Jobs im Hintergrund
nehmen.

genau das meinte ich ja. $$ liefert immer die PID des aktuellen Prozesses (in diesem Fall also die PID des Shell-Scripts), und den Prozess mit dieser PID willst du doch bestimmt nicht killen (dann reicht ja auch eine sinples exit).

Gruss
bernhard

Mhmm … Da ist mir wohl ein Fehler unterlaufen. Hatte das aus einem anderen Artikel von w-w-w, da wurde das dann wohl auch misinterpretiert :smile:

-nik

P.S.: Also nochmal ganz klar und deutlich: Es muss $! anstatt $$ heißen!