[1186278] Вы можете использовать [1186715] сортировку [1186716] для реорганизации вывода [1186717]netstat[1186718] в любом удобном для вас формате.
Это позволит отсортировать вывод, используя сначала 7-й столбец (имя процесса/ПИД), а затем состояние (ESTABLISHED, LISTEN и т.д.).
ПРИМЕЧАНИЕ:[1186720] Первая часть команды, [1186721]netstat -anpt 2>&1 | tail -n +5 ...[1186722] направит всю выходную мощность, которая может произойти на STDOUT, также на STDIN, а затем отрежет первые 5 строк, которые являются выходной мощностью котла из [1186723]netstat[1186724], в которых мы не заинтересованы.
Пример
Вы можете использовать аналогичный подход для получения подсчетов, используя различные инструменты, такие как [1186725]wc[1186726] или [1186727]uniq -c[1186728].
Изменение вывода
столбец -t[1186738] просто выравнивает все выходные данные в красивых столбцах.
Наконец, чтобы сделать то, что вы хотите с точки зрения подсчета вхождений:
Первый столбец представляет подсчет.[1186301]
Я согласен, что странно, что pidof
вырос до 30%. Но если это всего лишь временный всплеск, разве это будет так плохо?
В качестве альтернативы вы можете использовать ps (1)
. Пример:
$ ps ax | grep firefox
8621 ?? S 5:20.24 firefox
10409 p3 R+ 0:00.00 grep firefox
Вот несколько примеров для поиска pids процессов с именем "apache2". Есть небольшие различия (новые строки в выводе) между ними и pidof
, но в остальном они должны работать одинаково, в конвейерах и т.д.
Используя pidof
:
$ pidof apache2
31751 31750 31749 31748 31747 31489 31488 31487 31486 31485 1500
Newline-separated:
$ ps aux | grep apache2 | grep -v grep | awk -n '{print $2}'
1500
31485
31486
31487
31488
31489
31747
31748
31749
31750
31751
Space-separated:
$ ps aux | grep apache2 | grep -v grep | awk -n '{printf $2" "}'
1500 31485 31486 31487 31488 31489 31747 31748 31749 31750 31751
Я сделал несколько глупых таймингов для вышеуказанных команд.
$ date +%T:%N; pidof apache2 ; date +%T:%N
17:06:05:627088798
31751 31750 31749 31748 31747 31489 31488 31487 31486 31485 1500
17:06:05:634500908
$ date +%T:%N; ps aux | grep apache2 | grep -v grep | awk -n '{printf $2" "}' ; date +%T:%N
17:06:29:887314682
1500 31485 31486 31487 31488 31489 31747 31748 31749 31750 31751
17:06:29:903997288
pidof: 7,412,110 наносекунд
ps | grep | awk : 16,682,606 наносекунд
На моей машине pidof
загружается быстрее (как и ожидалось).
Вывод pidof
кажется отсортированным в обратном порядке, так что это было бы моей предпочтительной альтернативной инкантацией:
$ ps aux | grep apache2 | grep -v grep | awk -n '{print $2}' | sort -rn
31751
31750
31749
31748
31747
31489
31488
31487
31486
31485
1500
Существует набор команд для управления процессами (pgrep, pkill и т. д. ); так что лучший вариант это (для macOSX):
$ ps -ef | pgrep login
102
103
6245
6361
... или, в обратном порядке:
$ ps -ef | pgrep login | sort -rn
6361
6245
103
102
...или, последний:
$ ps -ef | pgrep login | sort -rn | head -n 1
6361