Como posso saber se um processo está sendo executado em segundo plano ou em primeiro plano em comandos ps
ou 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 jobs
não é usado aqui.
Responder1
O stat
campotem 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 ps
como oestadodo processo. man ps
lista estesestados do processosob o título de PROCESS STATE CODE
.
ps -ef
não relata o estado do processo, mas referindo- man ps
nos a encontramos na OUTPUT FORMAT CONTROL
seção que o -o
argumento pode ser usado para especificar a saída de ps
um ou maispalavras-chave. Essespalavras-chaveestão listados na STANDARD FORMAT SPECIFIERS
seção e, com extraordinária persistência, eventualmente encontraremos as s
palavras -chave stat
e state
listadas. 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:ps
favorece o usuário diligente.
Como exemplo, o ps
comando a seguir produzirá oPID, oestado, e acomandoque iniciou o processo usando opalavras-chave pid
, stat
e 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-chavestat
) - o
command
que 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 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
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 S
na 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
).