web-dev-qa-db-fra.com

Répertorie uniquement les processus en mode suspendu

pour lister les processus qui s'exécutent en arrière-plan, on peut taper: ps -ef ou ps -aux

mais comment lister les processus qui sont suspendus, supposons que j'avais un processus au premier plan et juste suspendu (avec bg <jobid> ou Ctrl+z)

comment puis-je savoir quels sont les processus dans ce statut (suspendu)?

merci

6
Algina

Vous pouvez utiliser la commande intégrée bash jobs pour afficher le statut des travaux en arrière-plan ou suspendus, par exemple.

  • démarrer et mettre en arrière-plan un processus; commencer et suspendre une seconde avec Ctrl+Z

    $ sleep 100 & sleep 200
    [1] 12444
    ^Z
    [2]+  Stopped                 sleep 200
    
  • vérifier le statut de tous les emplois

    $ jobs
    [1]-  Running                 sleep 100 &
    [2]+  Stopped                 sleep 200
    
  • vérifier l'état des travaux suspendus uniquement

    $ jobs -s
    [2]+  Stopped                 sleep 200
    

Reportez-vous à la section JOB CONTROL de man bash ou à l'aide en ligne du shell help jobs.

7
steeldriver

La sortie de psinclut l’état suivant:

$ ps aux | head -n2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 200892  5132 ?        Ss   Mar04   0:20 /sbin/init

La colonne STATest l’état du processus. Cela peut être l’un des (à partir de man ps):

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 by job control signal
           t    stopped by debugger during the tracing
           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

Vous recherchez donc des processus dont l'état est affiché sous la forme Tname__. Pour afficher uniquement ces processus, vous pouvez analyser la sortie pspour eux:

ps aux | awk '$8=="T"'

Parfois, des caractères supplémentaires peuvent être ajoutés au champ d'état (en fonction des options utilisées), ce qui peut être une approche plus sûre:

ps aux | awk '$8~/T/'
6
terdon