Como posso saber se um processo está sendo executado em segundo plano ou em primeiro plano na saída do comando “ps” ou “ps -ef”?

Como posso saber se um processo está sendo executado em segundo plano ou em primeiro plano na saída do comando “ps” ou “ps -ef”?

Como posso saber se um processo está sendo executado em segundo plano ou em primeiro plano em comandos psou ps -ef?

A princípio pensei que, quando digito ps -ef, há uma seção chamada TTY. quando olho para a lista de TTY, a maioria deles é ?. Eu me pergunto se esse ponto de interrogação significa processo em execução em segundo plano.

Quero verificar se estou certo! Caso contrário, quero saber como posso saber se o processo está sendo executado em segundo plano ou em primeiro plano.

obs. comando jobsnão é usado aqui.

Responder1

O statcampotem um extra +para processos em primeiro plano:

ps -e -o pid,tty,stat,cmd

Processos de primeiro plano são aqueles cujo id do grupo de processos ( pgid) é o de primeiro plano no terminal ( tpgid):

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'

quando olho para a lista de TTY, a maioria deles é '?' (pontos de interrogação) Eu me pergunto se esse ponto de interrogação significa processo em execução em segundo plano

Não, isso significa que eles não têm tty de controle (daemons ou threads de kernel, nem primeiro nem segundo plano). Para uma lista defundoprocessos:

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'

Responder2

O OP perguntou: "... como posso saber se o processo está sendo executado em segundo plano ou em primeiro plano?"

O status de primeiro e segundo plano de umprocessosão relatados por pscomo oestadodo processo. man pslista estesestados do processosob o título de PROCESS STATE CODE.

ps -efnão relata o estado do processo, mas referindo- man psnos a encontramos na OUTPUT FORMAT CONTROLseção que o -oargumento pode ser usado para especificar a saída de psum ou maispalavras-chave. Essespalavras-chaveestão listados na STANDARD FORMAT SPECIFIERSseção e, com extraordinária persistência, eventualmente encontraremos as spalavras -chave state statelistadas. Mas observe que, embora todos esses trêspalavras-chaveforneceráestadona saída, apenas ostat palavra-chavevai dar o multi-character process state! A conclusão:psfavorece o usuário diligente.

Como exemplo, o pscomando a seguir produzirá oPID, oestado, e acomandoque iniciou o processo usando opalavras-chave pid, state command:

ps -eo pid,stat,command

Para ver como isso funciona, considere este exemplo:

Em um terminal, execute este comando:

ping 8.8.8.8 > /dev/null

Em outro terminal:

ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+   ping 8.8.8.8

O que nos informa:

  • o PID é12518
  • o processoestadoé S+(via palavra-chave stat)
  • o commandque gerou o processo foiping 8.8.8.8

Há mais uma etapa necessária para saber se esse processo está em primeiro plano ou em segundo plano: oestadovalor de S+deve serdecodificadosob 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

Consequentemente, vemos na +posição do segundo personagem que este processo está sendo executado noprimeiro plano. Um processo em segundo plano pode ser listado com um Sna primeira posição do caractere e nada na segunda posição. Existem várias outras combinações de caracteres que indicam um processo em segundo plano; veressepara uma listagem.


FWIW: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