
Posso ver o processo em segundo plano usando ps. Mas existe uma maneira de visualizar o processo em primeiro plano? Por exemplo,
$nohup processo1 &
então
ps -ef | grep "processo1"
exibiria o processo "process1" em execução. Mas o comando acima não mostraria um processo em primeiro plano executado como,
$process2
Responder1
Você pode ficar confuso porque ps
por padrão mostra os processos que estão no mesmo terminal onde ps
é invocado, por exemplo, processos iniciados na mesma janela do terminal.
Tente ps -u $LOGNAME
ou se você souber os nomes dos terminais ps -t $THETTYNAME1,$THETTYNAME2
. (Os nomes dos terminais normalmente se parecem com "ttyN" ou "pts/N").
Responder2
Estranho, o comando ps permite monitorar o status de todos os processos ativos, tanto em primeiro quanto em segundo plano.
Por exemplo, inicio o seguinte processo em um primeiro shell:
$ startNetworkServer
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.3.2.1 - (599110) started and ready to accept connections on port 1527 at 2010-06-18 14:14:33.277 GMT
E em outra concha:
$ ps aux | grep NetworkServer | grep -v grep
pascal 5928 0.3 1.4 661492 29216 pts/0 Sl+ 16:14 0:03 /usr/lib/jvm/java-6-sun/bin/java -classpath /usr/share/javadb/lib/derby.jar:/usr/share/javadb/lib/derbynet.jar:/usr/share/javadb/lib/derbytools.jar:/usr/share/javadb/lib/derbyclient.jar org.apache.derby.drda.NetworkServerControl start
O processo é listado conforme esperado (e +
mostra que está no grupo de processos em primeiro plano).
Responder3
A questão:
"Existe uma maneira de visualizar o processo em primeiro plano?"A questão então afirma que ps -ef
não mostra processos em execução em primeiro plano.
Responder:
Sim, há uma maneira. Também:ps -ef
fazmostrar processos em execução em primeiro plano -mas não mostra oestadodos processos. Isto é explicado na documentação ( man ps
) e pode ser verificado em um experimento simples. Considere este exemplo:
Em um terminal, execute:
ping 8.8.8.8 > /dev/null
Em outro terminal:
ps -ef | grep ping | grep -v grep
seamus 1161 974 0 23:20 pts/1 00:00:00 ping 8.8.8.8
Observe que ps -ef
não forneceestadoinformações em sua saída. Contudo, man ps
explica queestadoInformaçãoestá disponívelusando o -o
argumento quando acompanhado da palavra-chave stat
:
ps -eo pid,stat,command | grep ping | grep -v grep
1161 S+ ping 8.8.8.8
O que nos diz:
- o PID do processo é
1161
via palavra-chavepid
- o processoestadoé
S+
por palavra-chavestat
- a
command
palavra-chave mostraping 8.8.8.8
gerou o processo
Oestadovalor de S+
édecodificadosob man ps
o título de PROCESS STATE CODE
. o que nos diz:
S suspensão interrompível (aguardando a conclusão de um evento)
+ está no grupo de processos em primeiro plano
QED
Vimos que ps -ef
lista o processo cujo PID é 1161
, e isso ps -eo pid,stat,command
revela oestadodo PID 1161
seja umprimeiro planoprocesso.
NOTA 1: palavras-chavepara o -o
argumento são descritos man ps
sob o título STANDARD FORMAT SPECIFIERS
. É explicado aqui que a palavra-chave stat
produz o processo de dois caracteresestado, enquanto a palavra-chave state
produz apenas um caractereestado.
NOTA 2:Isso funciona no meu sistema baseado em Debian (relatado como version ps from procps-ng 3.3.15
) e no macOS 10.15 (que é descendente da versão BSD do ps
).