Comando $! não funciona [RESOLVIDO]

1. Comando $! não funciona [RESOLVIDO]

lord beni-aretz
lord beni-aretz

(usa Red Hat)

Enviado em 27/12/2012 - 09:38h

Ola pessoal,

Segundo meus estudos esse comando deveria trazer o PID do último processo. Mas testei ele no Mint, Suse, Centos e nada.
Alguém sabe o porque ou qual procedimento devo usar para pegar o PID do Ultimo Processo?


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/12/2012 - 10:27h

# - Informa o número de parâmetros passados ao script Shell;
$ - Opções fornecidas pelo Shell;
$? - Informa o valor de retorno do último comando executado pelo script Shell;
$$ - Informa o número do processo (PID) do script Shell em execução;
$! - Número do último processo (PID) executado em background;
$n -Valor do parâmetro passado ao Shell, n=1, até 9, da esquerda para a direita;
$0 - Nome do programa ou Shell em execução;
$* - Informa todos os parâmetros passados ao script, separados por espaços em branco;
$@ - Igual à variável anterior $*.


Amigo,

essa variável especial armazena o valor do último PID em background, veja


root@positivo:~# find /etc -iname fstab &
[1] 1404
root@positivo:~# /etc/fstab
[1]+ Concluído find /etc -iname fstab
root@positivo:~# echo $!
1404


kyetoy


3. Re: Comando $! não funciona [RESOLVIDO]

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 27/12/2012 - 09:51h


$? Le code volta do último comando
$$ PID su shell que se executa o script
$! PID do último processo lançado em último plano


4. Re: Comando $! não funciona [RESOLVIDO]

lord beni-aretz
lord beni-aretz

(usa Red Hat)

Enviado em 27/12/2012 - 12:31h

kyetoy escreveu:

$# - Informa o número de parâmetros passados ao script Shell;
$ - Opções fornecidas pelo Shell;
$? - Informa o valor de retorno do último comando executado pelo script Shell;
$$ - Informa o número do processo (PID) do script Shell em execução;
$! - Número do último processo (PID) executado em background;
$n -Valor do parâmetro passado ao Shell, n=1, até 9, da esquerda para a direita;
$0 - Nome do programa ou Shell em execução;
$* - Informa todos os parâmetros passados ao script, separados por espaços em branco;
$@ - Igual à variável anterior $*.


Amigo,

essa variável especial armazena o valor do último PID em background, veja


root@positivo:~# find /etc -iname fstab &
[1] 1404
root@positivo:~# /etc/fstab
[1]+ Concluído find /etc -iname fstab
root@positivo:~# echo $!
1404


kyetoy


Agora entendi, mas será que existe uma variável ou comando que traga o último PID gerado ?


5. Re: Comando $! não funciona [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/12/2012 - 14:47h

Observe que não tem muita utilidade "guardar" o PID do último programa executado... e por outro lado pode até ser perigoso usar essa informação para tomar uma decisão...

Após terminar a execução um PID é liberado e NADA impede que ele seja utilizado IMEDIATAMENTE por outro processo... então qualquer ação sobre esse PID pode afetar um outro programa...

Então porque guardar o PID de background na variável?

Supõe-se que tarejas em background demorem para terminar... isso pode ser uma razão aceitável?!!! rs...ou não?!




6. Re: Comando $! não funciona [RESOLVIDO]

lord beni-aretz
lord beni-aretz

(usa Red Hat)

Enviado em 28/12/2012 - 16:53h

kyetoy escreveu:

Observe que não tem muita utilidade "guardar" o PID do último programa executado... e por outro lado pode até ser perigoso usar essa informação para tomar uma decisão...

Após terminar a execução um PID é liberado e NADA impede que ele seja utilizado IMEDIATAMENTE por outro processo... então qualquer ação sobre esse PID pode afetar um outro programa...

Então porque guardar o PID de background na variável?

Supõe-se que tarejas em background demorem para terminar... isso pode ser uma razão aceitável?!!! rs...ou não?!



O meu interesse em quardar o último PID gerado é para colocar em um Scrip que irá start o "Tomcat" e guardar o seu PID em uma variável. Assim posteriormente poderia matar o "Tomcat" com o comando kill "variavelPID".




7. Re: Comando $! não funciona [RESOLVIDO]

lord beni-aretz
Lord Beni-Aretz

(usa Red Hat)

Enviado em 23/08/2016 - 10:59h

lord beni-aretz escreveu:

kyetoy escreveu:

Observe que não tem muita utilidade "guardar" o PID do último programa executado... e por outro lado pode até ser perigoso usar essa informação para tomar uma decisão...

Após terminar a execução um PID é liberado e NADA impede que ele seja utilizado IMEDIATAMENTE por outro processo... então qualquer ação sobre esse PID pode afetar um outro programa...

Então porque guardar o PID de background na variável?

Supõe-se que tarejas em background demorem para terminar... isso pode ser uma razão aceitável?!!! rs...ou não?!



O meu interesse em quardar o último PID gerado é para colocar em um Scrip que irá start o "Tomcat" e guardar o seu PID em uma variável. Assim posteriormente poderia matar o "Tomcat" com o comando kill "variavelPID".



Apenas para completar esse tópico.
Resolvi da seguinte forma:

Criei uma variável e destinei a ela um sub shell pra filtrar o processo pelo grep e awk. Assim:
PID_TOMCAT="$(/usr/bin/ps aux | grep tomcat7 | grep -v grep | awk '{ print $2}')" 2>&1&> /dev/null

Assim eu filtrei pelo serviço Tomcat7, fiz com que ele não trouxesse o resultado do grep com "grep -v grep", filtrei pela pela segunda coluna para obter o PID com awk e joguei da saida e o erro para /dev/null.

Na verdade em meu scrip coloquei isso em uma function, que é executada logo após iniciar o serviço do Tomcat
function PEGA_PID_TOMCAT () {
PID_TOMCAT="$(/usr/bin/ps aux | grep tomcat7 | grep -v grep | awk '{ print $2}')" 2>&1&> /dev/null
}

Sendo que sempre que precisar matar o serviço do Tomcat, poderei usar o kill -9 $PID_TOMCAT

Em outra situação já fiz algo semelhante, mas direto, um scrip que chama a function MataTomcat, sendo que esta função faz pega o PID conforme acima e já executa o kill.
ai fica mais fácil. Sendo necessário apenas chamar a function Mata_WebLogic

:)




8. Re: Comando $! não funciona [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 23/08/2016 - 13:49h

Crie a variável, mas use o
pidof comando 

pra pegar o pid dele. Sem pogs com awk
--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts