- OK, per cominciare, penso che tu intenda
ps --pid
e nonps ---pid
. -
Non è necessario
echo $$
e poi digita il numero inps --pid number
;è sufficiente digitareps --pid $$
. A meno che tu non stia parlando di# echo $$ 42 # su joe % ps --pid 42
nel qual caso stai facendo la cosa giusta.
-
Cosa ti aspettavi?
--pid pidlist
- Seleziona per ID processo. Identico a -p e p .
-p pidlist- Seleziona per PID. Questo seleziona i processi i cui numeri ID di processo appaiono in pidlist . Identico a p e --pid .
Quindi, quando esegui
ps --pid PID_of_shell
, ottieni la riga dips
l'output di solo per il processo della shell . Potresti trovareps -l | grep PID_of_shell
più utile; mostrerà qualsiasi riga che contienePID_of_shell
ovunque, anche nella colonna PPID. Cioè, mostrerà i processi figlio della shell. Ma, ovviamente,grep 42
troverà cose come7428
. - La tua ipotesi è corretta; le variabili di ambiente vengono passate da genitore a figlio. Come indicato sopra, il tuo
su
shell è un figlio della tua shell di login (o altra shell genitore). Si noti, tuttavia, che un processo può modificare il proprio ambiente;sudo
è in qualche modo noto per fare questo, esu
fa anche questo (ad esempio, cambia$USER
,$LOGNAME
e$HOME
a meno che non specifichi--preserve-environment
, e ancora di più se specifichi--login
). Inoltre, un processo può passare ai suoi figli un ambiente diverso da quello che sta usando; la shell lo fa quando dici qualcosa comePAGER=cat man man_page_topic
. Riferimenti:1, 2. - Quindi, no, se imposti (esporti) una variabile d'ambiente nella shell in un terminale, e poi avvii un altro terminale tramite il window manager, non vedrà la variabile d'ambiente, perché non è un figlio (o discendente) della conchiglia che l'ha fissata. Ma se avvii una nuova finestra di terminale dalla shell (ad esempio, da
xterm&
), allora quella finestra di terminale erediterà l'ambiente della shell.
Che cos'è la shell in Linux?