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

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

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

netstat -nlp|grep 9000 

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

  tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

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

  • Почему SSH -t не ждет фоновых процессов?
  • Как найти PID конкретной программы?
  • Как узнать причину процесса, который будет спать, и разбудить его?
  • Определение конкретного процессора, на котором выполняется процесс
  • Как скрыть определенный процесс?
  • chdir (<каталог>) не меняет каталог после выхода в оболочку
  • Запросы о верхней команде
  • Получает ли этот диспетчер процесс зомби?
  • 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 .

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