Descubra qual processo está em primeiro plano no bash

3

Eu tenho uma sessão bash aberta para a qual eu tenho o PID, embora eu não esteja no controle do terminal (por exemplo, poderia ser outro usuário). Esta sessão bash gerou alguns processos filhos.

Existe alguma maneira de dizer qual (se houver) dos processos filhos está atualmente em primeiro plano para essa sessão bash?

    
por Cheetah 25.08.2014 / 23:50

2 respostas

6

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 campo STAT 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.

    
por 26.08.2014 / 00:29
0

^Z ( ctrl + Z) pode lhe dizer ... você poderia então usar ps para ver o processo e ver se ele tem filhos.

É claro que, se o programa não for planejado, a abordagem não funcionará.

Você também pode fazer login e tentar w e, em seguida, usar ps ou top para ver o que eles estão fazendo.

    
por 26.08.2014 / 00:15

Tags