Aprenda a diferença entre $$ e $ Bashpid em Bash
- 4055
- 720
- Wendell Legros
Recentemente, eu estava trabalhando em um script de shell e vi uma diferença significativa em como bash variável especial $
e Bashpid
se comporta. Todo processo em execução no Linux será atribuído com um processo EU IA E é assim que o sistema operacional lida com o processo.
Da mesma forma, sua sessão de terminal Bash também será atribuída com um ID do processo. Existe uma variável especial chamada "$"
e "$ Bashpid"
que armazena o ID do processo do shell atual.
Vá em frente e execute o comando abaixo para ver qual é o ID do processo do seu shell atual. Ambos "$"
e "$ Bashpid"
vai devolver o mesmo valor.
$ echo $$ # impressão variável especial $ $ echo $ Bashpid # Imprimindo o varibale $ BashpidEncontre ID do processo de shell atual
Em Bash, quando chamamos qualquer programa externo do shell, ele criará um processo/subshell infantil e o programa será enviado apenas no processo filho. Veja o exemplo abaixo, onde coloquei um comando simples de monitor de processo em um script chamado "amostra.sh ” para demonstrar como o shell pai cria uma subshell para executar o programa.
#!/usr/bin/Env Bash PS -EF -Forest | Grep -i Bash
Agora, na execução deste script, podemos obter o ID do processo do Bash. A partir da imagem abaixo, você pode entender quando liguei para o script Bash cria um processo infantil e execute o script.
$ ./amostra.shProcesso infantil Linux
Agora vamos usar os dois "$"
e "$ Bashpid"
dentro do script e veja o que ele retorna.
#!/usr/bin/Env Bash Echo "============================" PS -EF -Forest | Grep -i Bash Echo "=============================" Echo "PID usando $ para script $ 0 ==> $$" ECHO " "PID usando o Bashpid para Script $ 0 ==> $ Bashpid" Echo
Agora execute o script novamente.
$ ./amostra.shPID de processo infantil
Tudo bem, ele retorna o mesmo ID do processo. Aqui vem a diferença real. Vamos criar outro processo infantil dentro do script executando um comando dentro parênteses()
.
# Armazenando o PID em uma variável… var_hash = $ (echo $$) var_bashpid = $ (echo $ Bashpid) echo "valor de var_hash ==> $ var_hash" echo "valor de var_bashpid ==> var_bashpid"Diferença no PID
Em Bash, Parênteses invocará um processo infantil e executará o que vier dentro dos parênteses. Nesse caso, ambos $
e $ Bashpid
deve armazenar um novo ID do processo infantil. Mas pela imagem acima, você pode ver que há uma diferença onde $
lojas 382 Qual é o ID pai (ID do processo do script amostra.sh), e $ Bashpid
Armazena o ID do processo infantil criado criado por parênteses.
Agora vamos tentar entender esse comportamento. Veremos o que a página do homem diz.
$ MAN BASHPágina de homem por $ Página do homem para Bashpid
Quando você usa $
, Mesmo em uma subshell, ele armazena o ID do processo do processo pai que foi criado. Mas Bashpid
armazenará o ID do processo atual, eu.e quando chamado interna parênteses, ele armazenará o ID do processo filho.
Não podemos atribuir ou modificar a variável $
, mas Bashpid
pode ser transferido, mas não tem efeito.
$ $ = 10 $ BASHPID = 10 $ ECHO $ BASHPIDAtribuição variável de bash
É possível desmaiar Bashpid. Quando você não se sente, perde seu estado especial e também pode começar a usar isso como uma variável normal.
$ unset Bashpid $ echo $ Bashpid $ Bashpid = "Tecmint" $ ECHO $ BASHPIDUnset Bashpid
Mesmo se você tentar atribuir o ID do processo do shell, ele será tratado como uma variável definida pelo usuário, pois já perdeu seu estado especial.
$ Bashpid = $ (echo $$) $ echo $$; echo $ BashpidReatribuindo Bashpid
Nesse caso, você deve usar uma nova sessão de terminal para Bashpid Para conseguir seu estado especial.
É isso para este artigo. Vimos a diferença entre $
e Bashpid
e como eles se comportam neste artigo. Passe por este artigo e compartilhe seu valioso feedback conosco.
- « Como corrigir a partição NTFS falhou ao montar erro no Linux
- Como instalar e configurar o servidor OpenVPN no CentOS 8/7 »