- OK, para começar, acho que você quer dizer
ps --pide 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 42em 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 depssomente para o processo de shell . Você pode acharps -l | grep PID_of_shellmais útil; mostrará qualquer linha que contenhaPID_of_shellem qualquer lugar, incluindo na coluna PPID. Ou seja, ele mostrará os processos filhos do shell. Mas, é claro,grep 42encontrará 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, esutambém (por exemplo, ele altera$USER,$LOGNAMEe$HOMEa 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.