- OK, per cominciare, penso che tu intenda
ps --pide 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 42nel 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 dipsl'output di solo per il processo della shell . Potresti trovareps -l | grep PID_of_shellpiù utile; mostrerà qualsiasi riga che contienePID_of_shellovunque, anche nella colonna PPID. Cioè, mostrerà i processi figlio della shell. Ma, ovviamente,grep 42troverà cose come7428. - La tua ipotesi è corretta; le variabili di ambiente vengono passate da genitore a figlio. Come indicato sopra, il tuo
sushell è 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, esufa anche questo (ad esempio, cambia$USER,$LOGNAMEe$HOMEa 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?