- OK, para começar, acho que você quer dizer
ps --pid
e nãops ---pid
. -
Você não precisa
echo $$
e digite o número emps --pid number
; é bom o suficiente para digitarps --pid $$
. A menos que você esteja falando sobre# echo $$ 42 # su joe % ps --pid 42
em qual caso você está fazendo a coisa certa.
-
O que você estava esperando?
--pid pidlist
- Select by process ID. Identical to -p and p.
-p pidlist- Select by PID.
This selects the processes whose process ID numbers appear in pidlist.
Identical to p and --pid.
Então, quando você faz
ps --pid PID_of_shell
, você está recebendo a linha de saída deps
somente para o processo de shell . Você pode acharps -l | grep PID_of_shell
mais útil; mostrará qualquer linha que contenhaPID_of_shell
em qualquer lugar, incluindo na coluna PPID. Ou seja, ele mostrará os processos filhos do shell. Mas, é claro,grep 42
encontrará coisas como7428
. - Seu palpite está certo; variáveis de ambiente são passadas de pai para filho.
Como indicado acima, seu shell
su
é filho do seu shell de login (ou outro shell pai). Observe, no entanto, que um processo pode alterar seu ambiente;sudo
é um pouco notório por fazer isso, esu
também (por exemplo, ele altera$USER
,$LOGNAME
e$HOME
a menos que você especifique--preserve-environment
, e ainda mais se você especificar--login
). Além disso, um processo pode transmitir a seus filhos um ambiente diferente do que aquele que está usando; a casca faz isso quando você diz algo como %código%. Referências: 1 , 2 . - Portanto, não, se você definir (exportar) uma variável de ambiente no shell
em um terminal, e depois iniciar outro terminal através do gerenciador de janelas,
ele não verá a variável de ambiente, porque não é uma criança
(ou descendentes) do shell que o configurou.
Mas, se você iniciar uma nova janela de terminal a partir do shell (por exemplo, por
PAGER=cat man man_page_topic
), então essa janela de terminal herdará o ambiente do shell.