Ich habe ein Problem mit Bash und weiß nicht warum.
Unter Shell gebe ich ein:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" ist ein C-Programm zum Abrufen der aktuellen PID, wie:
int main() { printf("%d", (int)getpid()); return 0; }
Was mich verwirrt ist:
- Ich denke, "(Befehl)" ist ein Unterprozess (habe ich Recht?), Und ich denke, seine PID sollte sich von seiner übergeordneten PID unterscheiden, aber sie sind gleich, warum ...
- Wenn ich mein Programm verwende, um pid zwischen Klammern anzuzeigen, ist die angezeigte pid anders, stimmt das?
- ist '$$' so etwas wie ein Makro?
Können Sie mir helfen?
echo $$ $BASHPID ; ( echo $$ $BASHPID )zeigt, dass dies der Fall ist. Runde Klammern bilden eine Unterschale. Die Anweisungen können Variablenwerte ändern, und die übergeordnete Shell darf diese Änderungen nicht sehen. Dies wird als fork()Operation implementiert .
getpideine andere Prozess-ID angezeigt wird, selbst wenn sie nicht in einer Subshell ausgeführt wird.