Відповіді:
Існує кілька способів знайти, який запущений процес використовує порт.
Використовуючи фюзер, він дасть PID (и) декількох примірників, пов’язаних із портом прослуховування.
sudo apt-get install psmisc
sudo fuser 80/tcp
80/tcp: 1858 1867 1868 1869 1871
Дізнавшись, ви можете або зупинити процес, або вбити його.
Ви також можете знайти PID та інші деталі, використовуючи lsof
sudo lsof -i tcp:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1858 root 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1867 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1868 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1869 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
nginx 1871 www-data 6u IPv4 5043 0t0 TCP ruir.mxxx.com:http (LISTEN)
Для обмеження на сокети, які слухають порт 80 (на відміну від клієнтів, які підключаються до порту 80):
sudo lsof -i tcp:80 -s tcp:listen
Щоб вбити їх автоматично:
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
Ось oneliner, який показує команду для запуску:
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
Замінити echoна sudoдля процесу насправді убитий.
echoнаsudo
80.
Три варіанти списку відкритих портів пропонується в JSH «s whatisonport:
netstat -anp --numeric-ports | grep ":${PORT}\>.*:"
fuser -v "${PORT}"/tcp
lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"
Я вважаю за краще, netstatоскільки це швидкий, стислий та може перелічити порти, відкриті іншими користувачами. (Хоча для переліку імен та PID таких процесів все ще знадобляться права доступу користувача / користувача).
$ netstat -anp --numeric-ports | grep ":80\>.*:"
tcp6 0 0 :::80 :::* LISTEN 1914/apache2
$ fuser -v "80/tcp"
USER PID ACCESS COMMAND
80/tcp: root 1914 F.... apache2
www-data 12418 F.... apache2
...
$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2 1914 root 4u IPv6 11920 0t0 TCP *:80 (LISTEN)
apache2 12418 www-data 4u IPv6 11920 0t0 TCP *:80 (LISTEN)
...
Використання grepв двох випадках полягає в тому, щоб відповідати лише порту на локальній стороні та пропускати відкриті з'єднання з віддаленим портом 80. (Альтернативою може бути використання -lз netstatабо з lsofвикористанням -sTCP:LISTEN, але мені подобаються відповідні греки вище, тому що вони будуть також вловлювати вихідні з'єднання з даного порту, що може іноді представляти інтерес.)
З lsofми використовуємо -Pдля відображення :80замість :httpзробити Grep можливим. В -S 2опції сили , lsofщоб завершити вчасно.
Припускаючи, що ми хочемо використовувати netstat, ми можемо схопити PID так:
$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...
І ми могли навіть передати ці PID-адреси kill:
... | xargs -d '\n' kill -KILL
Однак при використанні регулярних виразів часто існує хибний позитив, тому я рекомендую просто переглянути початковий вихід, netstatа потім вручну вирішити, запускати чи ні:
$ kill -KILL 1914
У мене є ще один сценарій, listopenportsякий може викликати інтерес.
Ви вже з’ясували, який процес вбити: це номер процесу, 20570а його двійковий файл має назву, httpdяк написано в кінці рядка виводу netstat. Ви можете вбити це за номером kill 20570або по імені, killall httpdале я б не рекомендував це робити так.
Порти нижче 1024 мають стандартизоване використання (як правило), ви можете шукати тих і багатьох інших less /etc/services. Запис для порту 80 навіть коментується:
http 80/tcp www # WorldWideWeb HTTP
Тож це, швидше за все, веб-сервер. Назва у вас є httpdі man httpdмає дати вам великий натяк на те, що саме бінарний апарат Apache підходить. Apache - один з великих гравців, у ньому є кілька зручних програм управління, але вони вам не потрібні для простого запуску / зупинки.
У вас є монетний двір? З нормальним робочим столом? Потім подивіться Control Centerвнизу Systemі натисніть Services. Вам потрібно бути адміністратором, щоб робити що-небудь там. Прокрутіть униз до тих пір, поки не знайдете щось з написом "веб-сервер" (у мене є lighttpd замість Apache і не знаю, як точно виглядатиме запис Apache), і зніміть його.
Якщо ви просто хочете тимчасово зупинити це, спробуйте, в консолі
sudo service stop httpd
і почати з sudo service start httpd. service --status-allповертає список усіх служб, serviceпро які знає і може обробляти. Ярлик для перезапуску служби (тобто: зупинки і запуску його в цьому порядку) service --full-restart SERVICEз SERVICEбути ім'я служби, наприклад.: httpdВ разі Apache.
Більшість програм, з якими ви знаходитесь, netstatможуть обробляти таким чином. Деякі не можуть, а деякі навіть не мають довідкової сторінки, але вони рідкісні.
Існує простий спосіб зробити це. Спочатку перевірте, який процес використовує порт 80 через netstat :
netstat -ntl | grep 80
Тепер ви отримали ім'я процесу та вбити процес за допомогою команди killall :
killall -9 process name
killallбез пояснень чи попередження.
-kперемикач, щоб знищити всі відповідні процеси та-iвбивати інтерактивно (підказуючи для кожного з них).