Sou solicitado a verificar e encerrar os processos com os quais não estou familiarizado. Então, quando estou ls
na pasta bin, vejo vários processos .sh
. Mas quero saber qual processo está associado a qual processo do Tomcat.
Existe alguma maneira fácil de descobrir isso?
Exemplo startmyprocess1.sh
, mas quando o faço ps -ef | grep startmyprocess1
não retorna o processo em execução.
Mas, na verdade, o nome do processo do Tomcat em execução é myprocess
, então, quando o faço ps -ef | grep myprocess
, posso ver o processo em execução. Para saber isso tenho que perguntar ao responsável.
Então, os nomes são diferentes. Se for assim, preciso perguntar a ele várias vezes. Alguma maneira melhor de descobrir isso?
Responder1
tente este .., (não testado)
ps -aux | grep "yourprocess"
Por exemplo,
ps -aux | grep "httpd"
Responder2
Iniciar myprocess de dentro de startmyprocess.sh faznãonomeie o processo com base no script de shell subjacente, é por isso que você ps -ef | grep startmyprocess1
não retorna um resultado.
É também por isso que muitos processos, especialmente daemons, gravam seu pid em um arquivo para que você possa referenciar facilmente seu processo. Isso pode ser feito com:
#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid
ou você pode consultar $!
qual contém o último pid:
#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid
e consulte/liste o processo por seu pid:
ps --pid $PID
Responder3
Acho que softwares como o "top" farão um ótimo trabalho.
Tipo:
top
ou
htop
Responder4
A resposta de @invert explicou muito, o shell script apenas executa comandos dentro dele. O que isso significa é que você não obterá o nome do script de shell na saída de top
or htop
, que apenas imprime o /proc/$PID/cmdline de cada rotina dentro do script de shell.
Além de usar echo $!
o comando after para pegar o PID do que você deseja. Eu gostaria de usar pgrep
o comando quando precisar (ou pkill se você quiser matá-lo).
pgrep, pkill - procura ou sinaliza processos com base no nome e outros atributos
O pgrep simplesmente grep seus argumentos via /proc/*/cmdline e gera PIDs correspondentes O pkill é compatível com kill, então você pode facilmente matar qualquer rotina com o cmdline