pgrep для процессов, которые не связаны с терминалом в Ubuntu
Я хотел бы найти все идентификаторы процессов, которые не связаны с терминалом.
Когда я делаю ps aux | less
Команда, я вижу в поле TTY много процессов с ?
персонаж.
Я хотел бы получить эти идентификаторы процесса. Есть ли способ сделать это с pgrep
?
Я попытался просмотреть документацию здесь, но она мне не очень понятна.
2 ответа
Я хотел бы найти все идентификаторы процессов, которые не связаны с терминалом.
Есть ли способ сделать это с
pgrep
?
Нет, но есть способ ps
и его варианты
a … this option causes ps to list all processes with a terminal …
-N Select all processes except those that fulfill the specified conditions (negates the selection). …
o format Specify user-defined format. …
Итак, чтобы получить только те идентификаторы процесса без строки заголовка:
ps a -N opid=
С помощью find
pgrep --inverse -t \
"$(find /dev/ -type c -regex '.*tty[0-9]+' -printf '%f ')"
find
Команда вызывается путем подстановки команды. Поскольку подстановка команды заключена в двойные кавычки, вывод передается preg
как одно слово.
Опции:
-type c
выбирает только символьные специальные файлы (можно проверить с помощьюstat -c '%F' /dev/tty*
);-regex '.*tty[0-9]+'
выбирает только файлы, соответствующие регулярному выражению, вот и все (.*
) с последующим одним или несколькими (+
) цифры ([0-9]
);-printf '%f '
выводит имя файла с пробелом (find
печатает завершающий символ новой строки по умолчанию). поскольку-t
опция принимает список имен TTY (без"/dev/"
префикс), разделенные запятыми или пробелами, мы можем поставить либо пробел, либо запятую после имени файла (%f
).
Использование расширения имени файла
cd /dev
ttys=( tty[0-9][0-9]?[0-9]? )
cd - >/dev/null
pgrep -a --inverse -t "${ttys[*]}"
tty[0-9][0-9]?[0-9]?
расширен до tty
сопровождаемый одной, двумя или тремя цифрами (?
делает предыдущий шаблон необязательным).
ttys=( words )
строит массив из IFS
разделенные слова (IFS
также известен как "разделитель поля ввода").
"${ttys[*]}"
раскрывается в одно слово, состоящее из элементов массива, разделенных первым символом из IFS
(по умолчанию это пробел).