Есть ли способ найти спящие процессы в Ubuntu?
Я вижу, что top
может перечислить количество спящих процессов, но я хочу, чтобы они были перечислены с их именем.
Есть ли команды для этого?
Попробуйте:
ps o state,command axh | grep "^[SD]" | cut -b 3-
для вывода списка команд процессов с прерывистым и непрерывным режимом сна.
ps
выводит только состояние и команды всех процессов (ax
), а h
удаляет строку заголовка. grep
фильтрует процессы, отличные от двух состояний сна. cut
используется для повторного удаления выходных данных состояния. command
на ucmd
, если вам не нужно полное имя, включая все аргументы. Это, вероятно, неоптимальный сценарий здесь, но я не смог найти быстрый способ фильтрации ps
для определенного состояния.
Вы можете получить информацию сверху, которую можно запустить в пакетном режиме (-b
).
top -bn1 | awk 'NR > 7 && $8 ~ /S|D/ { print $12 }'
-n1
Топ работает только один раз и выходит. NR > 7
пропускает заголовок. $8 ~ /S|D/
выбирает программы, которые находятся в состоянии D
или S
. Возможные состояния, из top(1)
:
'D' = uninterruptible sleep 'R' = running 'S' = sleeping 'T' = traced or stopped 'Z' = zombie
Использование awk
и ps
ps o pid,state,command | \
awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'
Пример
Запустить mc
в терминале, открыть новый терминал и запустить команды ниже
kill -STOP $(pgrep mc)
ps o pid,state,command | \
awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'
Выходные данные
Sleeping 21668 mc