Перечислите только процессы, которые находятся в приостановленном режиме

для списка процессов, которые работают в фоновом режиме можно ввести: ps -ef или ps -aux

но как перечислить процессы, которые приостановлены, скажем, я имел некоторый процесс на переднем плане и просто приостановил (любой с bg <jobid> или Ctrl+z)

как я узнаю то, что процессы в том (приостановленном) состоянии?

спасибо

6
задан 27 March 2017 в 05:13

2 ответа

Вывод ps включает состояние:

$ 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

STAT столбец является состоянием процесса. Это может быть одним из (от 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

Так, Вы ищете процессы, состояние которых показывается T. Для наблюдения только тех процессов можно проанализировать эти ps вывод для них:

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

Иногда, дополнительные символы могут быть добавлены к полю состояния (в зависимости от опций, которые Вы используете), таким образом, это могло бы быть более безопасным подходом:

ps aux | awk '$8~/T/'
7
ответ дан 23 November 2019 в 07:22

Можно использовать удар jobs встроенный для наблюдения состояния заданий, которые являются фоном или приостановленный, например.

  • запустите и фон один процесс; запустите и приостановите секунду с Ctrl+Z

    $ sleep 100 & sleep 200
    [1] 12444
    ^Z
    [2]+  Stopped                 sleep 200
    
  • проверьте состояние всех заданий

    $ jobs
    [1]-  Running                 sleep 100 &
    [2]+  Stopped                 sleep 200
    
  • проверьте состояние только приостановленных заданий

    $ jobs -s
    [2]+  Stopped                 sleep 200
    

Посмотрите JOB CONTROL раздел man bash, или справка оболочки онлайн help jobs.

7
ответ дан 23 November 2019 в 07:22

Другие вопросы по тегам:

Похожие вопросы: