Você não especificou um sistema operacional. Eu vou assumir que você tem acesso ao GNU ps
.
Suponha que a sessão bash PID seja, por exemplo, 1857. Então, para descobrir quais processos estão em primeiro e segundo plano nessa sessão, execute:
$ ps -O stat --ppid 1857
PID STAT S TTY TIME COMMAND
1908 S S pts/4 00:00:00 sleep 30m
2071 S+ S pts/4 00:00:00 man ps
Veja a coluna STAT. O sufixo +
identifica os processos de primeiro plano. Os outros processos são de fundo.
No exemplo acima, sleep 30m
está em segundo plano nesse shell (o status é simples S
), enquanto man ps
está em primeiro plano (o status é S+
).
Como funciona:
-
--ppid 1857
Isso diz a
ps
para limitar a saída para aqueles processos cujo PID pai é 1857. -
-O stat
Isso diz a
ps
para fornecer o campoSTAT
na saída. Um+
neste campo nos informa que o processo está em andamento
O campo ps
STAT em detalhes
man ps
fornece detalhes sobre como interpretar o campo de status:
PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:
D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped, either by a job control signal or because it is being traced W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct ("zombie") process, terminated but not reaped by its parent For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group
Você está interessado em saber se um processo é primeiro plano, o último item é a chave: +
significa um processo em primeiro plano.