Как подсчитать количество экземпляров процессов с помощью bash?

Написание

ps aux | awk '{print $11}'

Дает мне все экземпляры процесса, но как их подсчитать, есть ли команда, которая делает это?

3
задан 2 June 2017 в 11:53

9 ответов

Поскольку ps aux печатает информацию об одном процессе на строку (включая заголовок, который можно отключить с помощью опции --no-heading).

Поэтому вы можете легко подсчитать процессы, просто подсчитав строки этого выхода, используя wc:

ps aux --no-heading | wc -l
4
ответ дан 22 May 2018 в 21:58

Поскольку ps aux печатает информацию об одном процессе на строку (включая заголовок, который можно отключить с помощью опции --no-heading).

Поэтому вы можете легко подсчитать процессы, просто подсчитав строки этого выхода, используя wc:

ps aux --no-heading | wc -l
4
ответ дан 18 July 2018 в 12:18

Поскольку ps aux печатает информацию об одном процессе на строку (включая заголовок, который можно отключить с помощью опции --no-heading).

Поэтому вы можете легко подсчитать процессы, просто подсчитав строки этого выхода, используя wc:

ps aux --no-heading | wc -l
4
ответ дан 24 July 2018 в 19:56

В других ответах уже упоминалось, что ps aux добавляет заголовок, поэтому вам также нужно --no-heading. Что еще мы можем сделать, так это то, что мы можем использовать команду pgrep для получения PID процессов, а затем подсчитывать их.

В принципе, мы можем сделать,

pgrep '^.*$' | awk 'END{print NR}'

Фокус здесь в том, что Блок кода END{} всегда выполняется после обработки файла обработки, stdin или конвейера, а NR остается неизменным, что является «количеством записей» или количеством строк, если это только один файл или конвейер. Что касается pgrep, мы просто сопоставляем любой процесс с регулярным выражением ^.*$, тем самым получаем список всех PID.

И для подсчета строк вы можете взять буквально любой метод из. Как мне подсчитать текст линии? вопрос, это не только должно быть awk.

1
ответ дан 22 May 2018 в 21:58
  • 1
    +1 хорошая вещь об этом ответе, если pgrep не включает себя в список;) – Ravexina 2 June 2017 в 22:25

Если вы хотите использовать awk:

ps aux --no-heading | awk 'END {print NR}'

, и если вы хотите подсчитать процесс конкретного пользователя:

ps -u ravexina -f --no-header | wc -l

В качестве альтернативы вы можете проверить [ f6]:

ls /proc | grep ^[1-9] -c

или

ls -d /proc/[1-9]* | wc -l
1
ответ дан 22 May 2018 в 21:58
  • 1
    @terdon Это файловая система proc, а не некоторые данные, предоставленные пользователем. Любой файл в корне файловой системы proc, чье имя начинается с цифры, является подкаталогом, чье имя является PID и чей контент является информацией о процессе с этим PID. И все файлы в этой иерархии «ручные», содержащие только ASCII alphanumerics и _ и не ведущие - (также еще несколько символов пунктуации вне PID-каталогов, но ни один из них не вызовет проблем в оболочках). – Gilles 2 June 2017 в 18:10
  • 2
    @Gilles ОК, как я уже сказал, шансы на имя новой строки там очень маленькие, но можете ли вы действительно быть на 100% уверены, что все и все числовые имена файлов в /proc всегда будут текущими PID? Или, что более важно, что если числовое имя файла найдено в /proc, вы можете быть уверены, что оно также будет указано в ps? – terdon♦ 2 June 2017 в 18:14
  • 3
    @terdon 1. Да: Linux-совместители ядра серьезно относятся к обратной совместимости, и, поскольку многие люди сделали это предположение, они будут продолжать гарантировать это. 2. Да, так как ps собирает свою информацию (попробуйте strace ps). – Gilles 2 June 2017 в 18:18
  • 4
    @Gilles достаточно справедливо, я думал, что он смотрит файл в / proc, я не понял, что он просто просматривал файлы напрямую. Спасибо за исправление. Приношу свои извинения за разговоры глупости Равексины. – terdon♦ 2 June 2017 в 18:27

Если вы хотите использовать awk:

ps aux --no-heading | awk 'END {print NR}'

, и если вы хотите подсчитать процесс конкретного пользователя:

ps -u ravexina -f --no-header | wc -l

В качестве альтернативы вы можете проверить /proc:

ls /proc | grep ^[1-9] -c

или

ls -d /proc/[1-9]* | wc -l
1
ответ дан 18 July 2018 в 12:18

В других ответах уже упоминалось, что ps aux добавляет заголовок, поэтому вам также нужно --no-heading. Что еще мы можем сделать, так это то, что мы можем использовать команду pgrep для получения PID процессов, а затем подсчитывать их.

В принципе, мы можем сделать,

pgrep '^.*$' | awk 'END{print NR}'

Фокус здесь в том, что Блок кода END{} всегда выполняется после обработки файла обработки, stdin или конвейера, а NR остается неизменным, что является «количеством записей» или количеством строк, если это только один файл или конвейер. Что касается pgrep, мы просто сопоставляем любой процесс с регулярным выражением ^.*$, тем самым получаем список всех PID.

И для подсчета строк вы можете взять буквально любой метод из. Как мне подсчитать текст линии? вопрос, это не только должно быть awk.

1
ответ дан 18 July 2018 в 12:18

Если вы хотите использовать awk:

ps aux --no-heading | awk 'END {print NR}'

, и если вы хотите подсчитать процесс конкретного пользователя:

ps -u ravexina -f --no-header | wc -l

В качестве альтернативы вы можете проверить /proc:

ls /proc | grep ^[1-9] -c

или

ls -d /proc/[1-9]* | wc -l
1
ответ дан 24 July 2018 в 19:56
  • 1
    @terdon Это файловая система proc, а не некоторые данные, предоставленные пользователем. Любой файл в корне файловой системы proc, чье имя начинается с цифры, является подкаталогом, чье имя является PID и чей контент является информацией о процессе с этим PID. И все файлы в этой иерархии «ручные», содержащие только ASCII alphanumerics и _ и не ведущие - (также еще несколько символов пунктуации вне PID-каталогов, но ни один из них не вызовет проблем в оболочках). – Gilles 2 June 2017 в 18:10
  • 2
    @Gilles ОК, как я уже сказал, шансы на имя новой строки там очень маленькие, но можете ли вы действительно быть на 100% уверены, что все и все числовые имена файлов в /proc всегда будут текущими PID? Или, что более важно, что если числовое имя файла найдено в /proc, вы можете быть уверены, что оно также будет указано в ps? – terdon♦ 2 June 2017 в 18:14
  • 3
    @terdon 1. Да: Linux-совместители ядра серьезно относятся к обратной совместимости, и, поскольку многие люди сделали это предположение, они будут продолжать гарантировать это. 2. Да, так как ps собирает свою информацию (попробуйте strace ps). – Gilles 2 June 2017 в 18:18
  • 4
    @Gilles достаточно справедливо, я думал, что он смотрит файл в / proc, я не понял, что он просто просматривал файлы напрямую. Спасибо за исправление. Приношу свои извинения за разговоры глупости Равексины. – terdon♦ 2 June 2017 в 18:27

В других ответах уже упоминалось, что ps aux добавляет заголовок, поэтому вам также нужно --no-heading. Что еще мы можем сделать, так это то, что мы можем использовать команду pgrep для получения PID процессов, а затем подсчитывать их.

В принципе, мы можем сделать,

pgrep '^.*$' | awk 'END{print NR}'

Фокус здесь в том, что Блок кода END{} всегда выполняется после обработки файла обработки, stdin или конвейера, а NR остается неизменным, что является «количеством записей» или количеством строк, если это только один файл или конвейер. Что касается pgrep, мы просто сопоставляем любой процесс с регулярным выражением ^.*$, тем самым получаем список всех PID.

И для подсчета строк вы можете взять буквально любой метод из. Как мне подсчитать текст линии? вопрос, это не только должно быть awk.

1
ответ дан 24 July 2018 в 19:56
  • 1
    +1 хорошая вещь об этом ответе, если pgrep не включает себя в список;) – Ravexina 2 June 2017 в 22:25

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

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