- OK, für den Anfang, ich glaube, Sie meinen
ps --pidund nichtps ---pid. -
Sie müssen nicht
echo $$und geben Sie dann die Nummer inps --pid numberein;Es genügt,ps --pid $$einzugeben . Es sei denn, Sie sprechen von# echo $$ 42 # su joe % ps --pid 42in diesem Fall tust du das Richtige.
-
Was haben Sie erwartet?
--pid pidlist
- Nach Prozess-ID auswählen. Identisch mit -p und p .
-p pidlist- Auswahl nach PID. Dies wählt die Prozesse aus, deren Prozess-ID-Nummern in der pidlist erscheinen . Identisch mit p und --pid .
Also, wenn Sie
ps --pid PID_of_shellmachen , erhalten Sie die Zeileps's Ausgabe nur für den Shell-Prozess . Möglicherweise finden Sieps -l | grep PID_of_shellnützlicher; es zeigt jede Zeile, diePID_of_shellenthält überall, auch in der PPID-Spalte. Das heißt, es werden untergeordnete Prozesse der Shell angezeigt. Aber natürlichgrep 42findet Dinge wie7428. - Ihre Vermutung ist richtig; Umgebungsvariablen werden vom Elternteil zum Kind weitergegeben. Wie oben angegeben, Ihr
suShell ist ein Kind Ihrer Login-Shell (oder einer anderen Eltern-Shell). Beachten Sie jedoch, dass ein Prozess seine Umgebung ändern kann;sudoist dafür etwas berüchtigt, undsutut es auch (z.B. ändert es$USER,$LOGNAME, und$HOMEes sei denn, Sie geben--preserve-environmentan , und noch mehr, wenn Sie--loginangeben ). Außerdem kann ein Prozess seinen Kindern eine andere Umgebung übergeben als die, die er verwendet; die Shell macht das, wenn Sie etwas wiePAGER=cat man man_page_topicsagen . Referenzen:1, 2. - Also, nein, wenn Sie eine Umgebungsvariable in der Shell in einem Terminal setzen (exportieren) und dann ein anderes Terminal über den Fenstermanager starten, wird es die Umgebungsvariable nicht sehen, weil es kein Kind (oder Nachkomme) ist der Schale, die es gesetzt hat. Aber wenn Sie ein neues Terminalfenster aus der Shell starten (z. B. durch
xterm&), dann erbt dieses Terminalfenster die Umgebung der Shell.