Як я можу вбити будь-який процес, що використовує порт 8080, щоб я міг скинути?


93

У MacOSX я використовую Packer для створення коробки Vagrant, тому мені потрібно постійно піднімати її та руйнувати. Я намагаюся "бродяжничати" та отримую стандартну помилку, оскільки використовується порт:

"Vagrant не може переадресувати вказані порти на цій ВМ, оскільки вони зіткнуться з якоюсь іншою програмою, яка вже прослуховує ці порти. Переадресований порт до 8080 вже використовується на хост-машині."

Рішення здається досить простим: мені просто потрібно визначити процес, який тримає порт 8080 відкритим, і вбити цей процес, так? Це не так просто.


Якщо я запустив команду:

nmap localhost -p 8080

Я отримую такий результат:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Якщо я запустив таку команду:

top -o prt

Найвищий порт, що використовувався в 1360 році


Якщо я запустив таку команду:

 netstat -tulpn | grep :8080

Я отримую:

netstat: n: unknown or uninstrumented protocol

Якщо я запустив таку команду:

lsof -i :8080

Я не отримую вихідних даних


Якщо я перезавантажу комп'ютер, порт тепер доступний, і тепер я можу "скинути".

Як я можу вбити будь-який процес, що використовує порт 8080, щоб я міг загубити, не перезавантажуючи комп’ютер?

Відповіді:


164

Це може допомогти

lsof -n -i4TCP:8080 

PID - це друге поле на виході.

Або спробуйте:

lsof -i -P

Дякую за спробу, але у своєму запитанні я заявив, що не отримую жодних результатів від команди lsof.
Jason Curran

Я додав ще одну можливість.
Mark Setchell

У вас випадково є принтер HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Марк

3
Дякую Марк! З будь-якої причини після перезапуску мого комп'ютера команди lsof нічого не видавали, і зараз вони. Зараз усі 3 команди lsof працюють, і я можу ідентифікувати ідентифікатор процесу та вбити його за допомогою: sudo kill -9 000 ... Де 000 - це ідентифікатор процесу. Назва процесу - "VBoxHeadless". Якщо я отримаю більше інформації про те, чому раніше це не працювало, я звітую про це. FYI: У мене немає принтера.
Jason Curran

Спробуйте sudo lsof -n -i4TCP:8080підібрати процеси, якими володіє root.
mpelzsherman 02

91

Швидке та швидке рішення:

lsof -n -i4TCP:8080

PIDє другим полем. Потім вбийте цей процес:

kill -9 PID

Менш швидке, але постійне рішення

  1. Перейдіть до /usr/local/bin/ (Можна використовувати команду + shift + g у пошуку)

  2. Створіть файл із іменем stop. Вставте в нього код нижче:

#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "Congrates!! $1 is stopped."
else
echo "Sorry nothing running on above port"
fi
rm temp.text
  1. Збережіть цей файл.
  2. Зробіть файл виконуваним chmod 755 stop
  3. Тепер перейдіть до терміналу та напишіть stop 8888(або будь-який порт)

4
Я спробував постійне рішення, але при спробі запустити сценарій отримав "Дозвіл відмовлено". Вирішено першим запуском chmod 755 stop.
nomadoda

32

Якщо прийнята відповідь не спрацювала, спробуйте подати рішення нижче. Ви можете використовувати його для порту 8080 або для будь-яких інших портів.

sudo lsof -i tcp:3000 

Замініть 3000 на будь-який порт, який ви хочете. Запустіть команду нижче, щоб убити цей процес.

sudo kill -9 PID

PID - це ідентифікатор процесу, який ви хочете вбити.

Нижче наведено вивід команд на терміналі mac.

Виведення команди


1
я спробував би спершу вбити (не -9). Параметр -9 може призвести до неправильного закриття розетки. Процес може бути вбитий, але інший слухач роздвоїться замість нього.
stackPusher

6

Для написання сценарію:

pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
  kill -9 $pid
fi

-tАргумент робить висновок LSOF «скупий» , що означає , що вона тільки повертає PID.


1
Ви можете зробити його функціонуванням теж, що займає $ port
mebada

Нарешті, рішення, яке отримує ПІД безпосередньо. Дякую людині, повинна бути правильна відповідь на цю тему
Olympiloutre

3

Мені потрібно було виконати цю команду

sudo lsof -i :80 # checks port 8080

Тоді я зрозумів

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
acwebseca 312 root   36u  IPv4 0x34ae935da20560c1      0t0  TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)

показати, яка служба використовує PID

ps -ef 312

Тоді я зрозумів це

  UID   PID  PPID   C STIME   TTY           TIME CMD
    0   312    58   0  9:32PM ??         0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console

Щоб видалити агент веб-безпеки cisco, запустіть

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

кредити на: http://tobyaw.livejournal.com/315396.html


2

Це може бути Cisco AnyConnect. Перевірте, чи існує /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist. Потім вивантажте його за допомогою launchctl і видаліть з / Library / LaunchDaemons


2
sudo lsof -i:8080

Запустивши наведену вище команду, ви зможете побачити, які всі завдання виконуються.

kill -9 <PID Number>

Введіть PID (ідентифікаційний номер процесу), тож екземпляр буде припинено / знищено.


1

Ви також можете використовувати Activity Monitor, щоб ідентифікувати та вийти з процесу за допомогою порту.


1
Як би я це зробив?
Emil Stenström

На MacOSX: Монітор активності> Мережа> сортувати за PID> знайти заблокований порт (наприклад, 8080, 5000 тощо)> клацнути вгорі ліворуч «X»> підтвердити, що ви хочете вийти з процесу. Може бути гарною ідеєю відредагувати конфігурацію запуску / збірки, щоб переконатися, що можна створювати лише окремі екземпляри сервера, тобто ваші використані порти звільняються при відключенні.
Alex Friedmann,

1

Запустити: nmap -p 8080 localhost(Встановіть nmap за допомогою MacPorts або Homebrew, якщо у вас його ще немає у вашій системі)

Звіт про сканування Nmap для localhost (127.0.0.1)

Хост збільшено (затримка 0,00034s).

Інші адреси для localhost (не скановані): :: 1

ДЕРЖАВНА ПОСЛУГА ПОРТУ

8080 / tcp відкрити http-проксі

Виконати: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

640 99335 88310 0 12:26 вечора ttys002 0: 00.01 grep http-proxy "

Виконати: ps -ef 640 (замініть 501 своїм UID)

/System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd

Порт 8080 на mac osx використовується тим, що встановлено з XCode SDK


1

Використовуйте таку команду:

lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9

Ідентифікатор процесу порту 8080 буде обрано та примусово вбито kill -9.


0

спробуйте netstat

netstat -vanp tcp | grep 3000

якщо ваш netstat не підтримує -p, використовуйте lsof

sudo lsof -i tcp:3000 

Для використання Centos 7

netstat -vanp --tcp | grep 3000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.