- OK, für den Anfang, ich glaube, Sie meinen
ps --pid
und nichtps ---pid
. -
Sie müssen nicht
echo $$
und geben Sie dann die Nummer inps --pid number
ein;Es genügt,ps --pid $$
einzugeben . Es sei denn, Sie sprechen von# echo $$ 42 # su joe % ps --pid 42
in 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_shell
machen , erhalten Sie die Zeileps
's Ausgabe nur für den Shell-Prozess . Möglicherweise finden Sieps -l | grep PID_of_shell
nützlicher; es zeigt jede Zeile, diePID_of_shell
enthält überall, auch in der PPID-Spalte. Das heißt, es werden untergeordnete Prozesse der Shell angezeigt. Aber natürlichgrep 42
findet Dinge wie7428
. - Ihre Vermutung ist richtig; Umgebungsvariablen werden vom Elternteil zum Kind weitergegeben. Wie oben angegeben, Ihr
su
Shell ist ein Kind Ihrer Login-Shell (oder einer anderen Eltern-Shell). Beachten Sie jedoch, dass ein Prozess seine Umgebung ändern kann;sudo
ist dafür etwas berüchtigt, undsu
tut es auch (z.B. ändert es$USER
,$LOGNAME
, und$HOME
es sei denn, Sie geben--preserve-environment
an , und noch mehr, wenn Sie--login
angeben ). 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_topic
sagen . 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.