Как перечислить только не - <более не существующие> процессы?

find / '(' -type f -or -type d ')' \
       '(' '(' -user  nobody -perm -u=w ')' -or \
           '(' -group nobody -perm -g=w ')' -or \
           '('               -perm -o=w ')' ')' -print

Это найдет все файлы и каталоги, принадлежащие nobody это перезаписываемо их владельцем, или которые принадлежат группе nobody это - перезаписываемая группа, а также все файлы или каталоги, которые перезаписываемы любым.

3
24.05.2011, 00:44
2 ответа

В Вашем комментарии Вы разъясняетесь:

Я на самом деле ищу одноэтапную опцию к PS или pgrep (или подобный) который только выводы "активные" процессы...

Я боюсь, что Вам не повезло с текущими ps/pgrep реализациями.

Сообщение, фильтрующее как это, полагается на полное понимание начального вывода, который я не имею...

Но можно получить то понимание и, еще лучше, управление, которые производят, как желаемый. Попробуйте что-то вроде этого:

function pgrep_live {
  pids=$(pgrep "$1");
  [ "$pids" ] || return;
  ps -o s= -o pid= $pids | sed -n 's/^[^ZT][[:space:]]\+//p';
}

Это возвратит pids для любых процессов pgrep'd, соответствующих Вашей входной строке, какие процессы "доступны для нормальной эксплуатации", то есть, ни dead+unreaped (Z), ни остановился (T).

6
27.01.2020, 21:15
  • 1
    Это похоже на то, что я после... Столбец STAT кажется, что содержит информацию, в которой я нуждаюсь (т.е., состояние), поэтому хотя нет прямой опции, это было бы довольно надежно для тестирования на определенное состояние через sed.... Я более внимательно рассмотрю в этом, немного позже... это выглядит хорошим –  Peter.O 24.05.2011, 00:18
  • 2
    Спасибо.. Ваш ответ прорубил вуаль... Некогда, пустой набор слов в PS человека теперь становится значимым.. Я вижу, почему Вы сказали "... и, еще лучше, управляйте тем выводом, как желаемый".... это очень настраиваемо, и легенда кодов статистики находится под КОДАМИ СОСТОЯНИЯ ПРОЦЕССА в странице справочника.. –  Peter.O 24.05.2011, 11:47

можно попробовать-v опцией grep, которые инвертируют regex как это:

for p in $(pgrep ^gnuserv$) ;do ps x |grep "^$p" | grep -v \<defunct\> ;done
0
27.01.2020, 21:15
  • 1
    sed и grep в значительной степени то же в этой ситуации... Я на самом деле ищу одноэтапную опцию к PS или pgrep (или подобный) который только выводы "активные" процессы... Сообщение, фильтрующее как это, полагается на полное понимание начального вывода, который я не имею..., например. [gnuserv] <defunct> взял меня полностью врасплох (что другие неожиданности я могу ожидать?.. –  Peter.O 23.05.2011, 16:41

Теги

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