bash: PID einer subshell schon in der subshell wissen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

bash: PID einer subshell schon in der subshell wissen

Beitrag von chr.gogolin » 14.08.2009 22:44:36

Hallo,

ich muss in einem bash-Skript innerhalb einer subshell die PID dieser subshell herausfinden.

Code: Alles auswählen

#!/bin/bash
...
(subshellPID=???)
...
Was ich suche ist nicht

Code: Alles auswählen

...
(subshellPID="$$")
...
denn das gibt die PID des Skripts dass die subshell gestartet hat.

Was ich suche ist auch nicht etwas in der Art

Code: Alles auswählen

...
(...) &
subshellPID=!$
...
denn ich muss die PID schon in der subshell wissen.

Angeblich [1] gibt es dafür "$BASHPID", aber bei mir ist die Variable immer leer.
(edit: liegt wohl daran das es die erst ab Version 4 gibt. Aber wie mache ich dass dann in Version 3?)

[1] http://tldp.org/LDP/abs/html/internalva ... BASHPIDREF
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von Meillo » 14.08.2009 22:50:25

So?

Code: Alles auswählen

( ps --ppid $$ )
Use ed once in a while!

chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von chr.gogolin » 14.08.2009 23:15:27

Ahhh, guter Vorschlag!

Das einzige mögliche verbleibende Problem ist Folgendes:

ps --ppid listet mehrere subshells mit dem selben Namen auf. In meinem Fall kann ich die richtige (scheinbar) an der Reihenfolge erkennen.
In meinem Fall ist es immer der erste Eintrag, also:

Code: Alles auswählen

ps --ppid "$$" | awk -F" " 'NR==2{print $1}' > "$PIDFILE"
Was macht man wenn das nicht geht? Bzw. gibt es noch einen eleganteren Weg?

Sagen wir, ich brauche die PID um den Prozess zu killen. Wäre schon blöde wenn ich den falschen erwische...
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von Meillo » 14.08.2009 23:24:46

chr.gogolin hat geschrieben:Sagen wir, ich brauche die PID um den Prozess zu killen. Wäre schon blöde wenn ich den falschen erwische...
Notfalls listest du dir die Subshells zuvor auf und schaust welche neu dazugekommen ist. Ist halt nicht elegant.;-)
Sonst halt anhand der Realzeit die der Prozess schon läuft ... aber da musst du selbst in ps(1) stöbern.
Use ed once in a while!

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von habakug » 15.08.2009 11:48:30

Hallo!

Vielleicht auch so:

Code: Alles auswählen

#!/bin/sh
echo "Dies ist eine Subshell."
read subpid rest < /proc/self/stat
echo "Die PID ist:'$subpid'"
echo "Die Bash kennt die >BASHPID<."
echo $BASHPID
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von lemak » 15.08.2009 16:30:09

@habakug
magst du mal die Zeile

Code: Alles auswählen

read subpid rest < /proc/self/stat
genauer erklären? Vor allem das rest. Oder auch Jemand anders :) Da ich das hier auch ganz gut brauchen kann.

Auf meinem System gibt es kein man read ist wohl ein Shell Build-In :?:

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: bash: PID einer subshell schon in der subshell wissen

Beitrag von habakug » 15.08.2009 16:57:46

Hallo!

Die Syntax ist etwa so:

Code: Alles auswählen

read [options] Name_1 Name_2 ... Name_n
Dies Ausgabe von "cat /proc/self/stat" Ist eine lange Liste. Die erste Zahl geht nun in "Name_1" und der Rest in "Name_2".

Gruß, habakug

http://www.vias.org/linux-knowhow/bbg_s ... 02_01.html
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Antworten