PID einer aufgerufenen Funktion in der bash
Florian Lohoff
f at zz.de
Mon Apr 5 16:23:48 CEST 2010
On Mon, Apr 05, 2010 at 10:10:40AM +0200, Juergen Raschke wrote:
> Es mag sich vielleicht kleinkariert anhoeren, aber dein
> "escape"tes $$ liefert die pid der per sh geforkten shell
> nicht der dort darin aufgerufenen subshell "()".
> Das geht auch gar nicht mittels $$.
>
> Aus "man bash":
> $
> Expands to the process ID of the shell. In a () subshell, it
> expands to the process ID of the current shell, not the subshell.
Das ist aber kein spezielles PID problem sondern ein generisches Variable
expansion problem ... Wie ich ja im testcase auch gezeigt habe.
$$ wird sofort expanded d.h. die pid der calling d.h. parent shell
\$$ wird erst in der subshell expanded und damit zu pid der subshell.
\$$ ist fuer die shell keine variable sondern das \$ wird zu $ expanded
btw deescaped - dadurch wird das in DER shell nicht mehr bearbeitet sondern
so an die subshell durchgereicht die das dann expanden kann.
$ echo $$ ; sh -c "echo $$ \$$ ; pstree -ph $$"
8222
8222 8983
bash(8222)───sh(8983)───pstree(8984)
Dazu kommt noch das $BASHPID eben nicht POSIX ist und damit auf allem anderen
als bash auf die nase faellt... Z.b. bei aktuellem debian squeeze weil da die
default /bin/sh eine "dash" ist und keine "bash" mehr ...
Flo
--
Florian Lohoff f at zz.de
"Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat
im Internet Zensur- und Überwachungsabsichten zu unterstellen."
- - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
URL: <http://lug-owl.de/pipermail/linux/attachments/20100405/27535e97/attachment.sig>
More information about the Linux
mailing list