Процес вбивства працює на порту 80


14

Це процес, який я хочу вбити:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

Відповіді:


31

Існує кілька способів знайти, який запущений процес використовує порт.

Використовуючи фюзер, він дасть 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

1
Я хотів би зазначити, що фюзер також має -kперемикач, щоб знищити всі відповідні процеси та -iвбивати інтерактивно (підказуючи для кожного з них).
А. Вількокс

7

Ось oneliner, який показує команду для запуску:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Замінити echoна sudoдля процесу насправді убитий.


Замініть echoнаsudo
EliuX

Це ідеальна відповідь, на яку ми просто повинні замінити номер нашого порту 80.
Юссоф Х.

4

Три варіанти списку відкритих портів пропонується в 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який може викликати інтерес.


3

Ви вже з’ясували, який процес вбити: це номер процесу, 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можуть обробляти таким чином. Деякі не можуть, а деякі навіть не мають довідкової сторінки, але вони рідкісні.


0

Існує простий спосіб зробити це. Спочатку перевірте, який процес використовує порт 80 через netstat :

netstat -ntl | grep 80

Тепер ви отримали ім'я процесу та вбити процес за допомогою команди killall :

killall -9 process name

Які небезпеки використання команди 'killall'?
Пітер Мортенсен

2
-1 для killallбез пояснень чи попередження.
guntbert

1
У кіллера є кілька проблем. Окрім того, що в змозі підвести систему до колін у випадку проблеми, вона також може вбити кілька випадків процесу, не пов'язаного з портом. На додаток до всього, найбільша проблема killall полягає в тому, що якщо хтось із вікна Solaris намагається його використовувати, він вбиває всі запущені процеси.
Rui F Ribeiro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.