Поиск PID процесса с использованием определенного порта?

Я устанавливаю hadoop в свою систему Ubuntu. Когда я его запускаю, он сообщает, что порт 9000 занят.

Я использовал:

netstat -nlp|grep 9000 

чтобы увидеть, существует ли такой порт, и я получил это:

  tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

Но как я могу получить PID процесса, который его удерживает?

  • Можно ли вызвать вызов exec, который «возвращает»?
  • Открытие именованных блоков труб навсегда, если труба удалена без подключения
  • killall дает мне «никакого процесса найдено», но ps
  • Почему процесс «ребенка» заканчивается перед его родителем?
  • Как убить команду, выполненную из скрипта?
  • Как устранить то, что ест память?
  • О пользователе ssh ProxyCommand
  • Измените «Мягкий предел» «Максимальных процессов»
  • 5 Solutions collect form web for “Поиск PID процесса с использованием определенного порта?”

    В Linux вы должны быть root или другим пользователем, чтобы получить информацию о процессе для процессов, запущенных как другие пользователи, поэтому добавление sudo – это большая часть того, что вам нужно. В дополнение к этому, в современных Linux-системах ss – это инструмент, который можно использовать для этого:

     $ sudo ss -lptn 'sport = :80' State Local Address:Port Peer Address:Port LISTEN 127.0.0.1:80 *:* users:(("nginx",pid=125004,fd=12)) LISTEN ::1:80 :::* users:(("nginx",pid=125004,fd=11)) 

    Вы также можете использовать тот же вызов, который вы используете, но не забудьте:

     $ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx 

    Вы также можете использовать lsof:

     $ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN) 

    Также вы можете использовать утилиту lsof . Нужно быть root.

     # lsof -i :25 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME exim4 2799 Debian-exim 3u IPv4 6645 0t0 TCP localhost:smtp (LISTEN) exim4 2799 Debian-exim 4u IPv6 6646 0t0 TCP localhost:smtp (LISTEN) 

    Я использую «CentOS 7 минимальный», который не имеет ни netstat ни lsof . Но у многих дистрибутивов Linux есть команда статистики сокетов (т.е. ss ).

    Вот пример выполнения:

     # ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4)) 

    Также вы можете использовать fuser :

     fuser -v -n tcp 22 

    Выход :

      USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd 

    Выполнение команды с помощью sudo даст вам PID . На моей машине разработки я получаю:

     $ netstat -nlp | grep 8080 

    tcp6 0 0 ::: 8080 ::: * LISTEN

     $ sudo netstat -nlp | grep 8080 

    tcp6 0 0 ::: 8080 ::: * LISTEN 16449 / java

    И, как упоминалось в других ответах, вы также можете использовать команды ss или lsof .

    Interesting Posts

    Как я могу узнать, почему я не могу подключиться к WLAN?

    wget использует адрес ipv6 и занимает слишком много времени, чтобы завершить

    Работы Cron работают на 1 час, в общем несогласие с системными временами

    Беспроводная поддержка Realtek 8723be, PC-BSD

    Заменить все значения в одном столбце на 1

    Вино не может имитировать перезагрузку системы после конфигурации Microsoft Office

    Как я могу переместить (rsync) огромное количество данных, надежно, может обрабатывать сетевые прерывания?

    Как расширить среднюю файловую систему, используя только FDISK?

    Как безопасно возобновить aptitude dist-upgrade после тайм-аута SSH?

    Редактор Joe: изменение подсветки синтаксиса

    Как правильно использовать PAM для выполнения скрипта при неудаче входа в систему

    Лучший способ сделать переменные локальными в сценарии source'd bash?

    Как извлечь деталь диска в Linux?

    Размер внутреннего буфера wget

    Создание сценария systemd для Sybase ASE

    Linux и Unix - лучшая ОС в мире.