Visualizando o processo em primeiro plano usando ps

Visualizando o processo em primeiro plano usando ps

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 pspor 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 $LOGNAMEou 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 -efnã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 -efnão forneceestadoinformações em sua saída. Contudo, man psexplica queestadoInformaçãoestá disponívelusando o -oargumento 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 é 1161via palavra-chavepid
  • o processoestadoé S+por palavra-chavestat
  • a commandpalavra-chave mostra ping 8.8.8.8gerou o processo

Oestadovalor de S+édecodificadosob man pso 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 -eflista o processo cujo PID é 1161, e isso ps -eo pid,stat,commandrevela oestadodo PID 1161seja umprimeiro planoprocesso.


NOTA 1: palavras-chavepara o -oargumento são descritos man pssob o título STANDARD FORMAT SPECIFIERS. É explicado aqui que a palavra-chave statproduz o processo de dois caracteresestado, enquanto a palavra-chave stateproduz 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).

informação relacionada