Более быстрые альтернативы lsof

8

Я хочу извлечь идентификатор процесса определенного процесса, чтобы закрыть его. Процесс представляет собой локальный веб-сервер, использующий определенный порт (localhost: 3000), и в настоящее время я делаю это следующим образом, чтобы извлечь соответствующую строку:

lsof|grep localhost:3000

но lsofкоманда слишком медленная. Есть ли более быстрый способ извлечь идентификатор процесса?

Савва
источник
lsof -iперечислите только сетевые подключения.
Ханан Н.
@HananN. Я попробовал, но все еще очень медленно. Использование netstat, как предлагается в ответах, намного быстрее.
Sawa
2
lsofэто не медленная часть, использующая все разрешения имен и IP-разрешения. Сделайте все это числовым, и все будет быстро.
Марцин
@ Марчин Ваша информация была действительно полезна так же, как и ответы. Спасибо.
Sawa
Есть ли причина, по которой вы можете t use убить всех pgrepили pkill?
Нильс

Ответы:

7

Попробуйте netstat, но я не могу сказать, быстрее он или медленнее.

netstat -tanp | awk '$4 ~ /:8443$/ {sub(/\/.*/, "", $7); print $7}' | sort -u
Никхил Мулли
источник
1
Я понимаю, чтобы использовать опцию -p, Linux требует, чтобы вы были пользователем root.
Нихил Малли
1
Это определенно быстрее, поскольку netstat перечисляет только сетевые подключения (и не все открытые файлы)
Matteo
Спасибо за быстрый и точный ответ. Я очень помог мне.
Sawa
11

Вы можете установить опцию -n в lsof, а затем удалить разрешение DNS, что может ускорить отображение

Дом
источник
Да, это, кажется, решает проблему, и полезно. Это было частично предложено Марцином в комментарии к моему ответу.
Sawa
1
Время, о котором сообщается, занимает 10 секунд независимо от параметра n.
user1133275
2
sudo ss -p -l '( sport = :3000 )'|awk -F"," 'NR!=1{print $2}'

Это напечатает PID процесса, слушающего на 3000

time сообщает, что это завершено в 0m0.018s.

Джоди С
источник