Я устанавливаю hadoop в моей системе Ubuntu. Когда я запускаю его, он сообщает, что порт 9000 занят.
Я использовал:
netstat -nlp|grep 9000
чтобы увидеть, существует ли такой порт, и я получил это:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Но как я могу получить PID процесса, который его держит?
netstat
Команда может работать во многих операционных системах, чтобы вы могли это получить, вам просто нужно найти аргументы, которые обеспечат отображение pids вдоль каждого известного открытого порта.Ответы:
В Linux вы должны быть пользователем root или владельцем процесса, чтобы получить желаемую информацию. Таким образом, для процессов, запущенных от имени другого пользователя, предварительная подготовка
sudo
- это большая часть того, что вам нужно. В дополнение к этому, в современных системах Linuxss
есть инструмент для этого:Вы также можете использовать тот же вызов, который вы используете в данный момент, но не забывайте
sudo
:Вы также можете использовать lsof:
источник
-p
опция предназначена для протокола, а не для процесса. Смотрите этот вопросFinding the PID of the process using a specific port
sudo
сверху.lsof -ti tcp:80
Также вы можете использовать
lsof
утилиту. Нужно быть root.источник
established
подключениями, а не только процессы, которые естьlistening
.lsof -i :25 -Fp
, который производит вывод, какp1234
.Я использую "CentOS 7 минимальный", который не имеет ни того,
netstat
ни другогоlsof
. Но во многих дистрибутивах Linux есть команда статистики сокетов (т.е.ss
).Вот пример выполнения:
источник
ss -pntl 'sport = :6379'
Запуск команды с
sudo
даст вамPID
. На моей машине разработки я получаю:И, как упоминалось в других ответах, вы также можете использовать команды
ss
илиlsof
.источник
sudo
идентификатора процесса отображенияsudo netstat -nlp | grep 34157
все еще отображать-
вместо PID?Также вы можете использовать
fuser
:Выход :
источник
sudo
если процесс оскорбления также был запущенsudo