Более быстрые альтернативы 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.