Как я могу убить процесс, запущенный на определенном IP и определенном порту? [закрыто]

Мне удалось решить мою проблему, добавив ppa отсюда https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

На этом сайте в терминал надо добавить две строчки:

sudo add-apt-repository ppa:graphics-drivers/ppa

а затем:

sudo apt-get update

Целью вышеизложенного было добавить историю драйверов для Nvidia до самой последней 381 (на данный момент). Я не знал, что большая часть контента контролируется через PPA. Наконец, я добавил эту строку в терминал (заменив текущую версию значением из устаревшего ответа на форуме) и последовал подсказкам:

sudo apt-get install nvidia-381 nvidia-prime 

После краткого сброса я могу использовать свой драйвер Nvidia как обычно. Экран стал лучше, и теперь игры работают на пределе возможностей моего графического процессора.

1
17.05.2017, 22:53
5 ответов

Вероятно, есть более чистые способы, но что-то вроде:

netstat -lnp | grep 'tcp .*127.0.0.1:9984' | sed -e 's/.*LISTEN *//' -e 's#/.*##' | xargs kill
6
27.01.2020, 23:10

fuser в Linux есть опция, которая делает именно то, что вы хотите сделать.

Например, fuser 80/tcp напечатает PID процесса, связанного с этим портом, а fuser -k 80/tcp завершит этот процесс.

3
27.01.2020, 23:10

В Linux в качестве root вы можете использовать либо

ss -ptan 

или

netstat -ntulp

чтобы получить список всех запущенных процессов, которые «слушают» (в данном случае tcp, замените «t» на «u» для udp ).

Таким образом, один лайнер для уничтожения процесса, прослушивающего порт 80, будет выглядеть примерно так:

ss -tanp | grep 80 | head -1 | sed 's_.*pid=\(.*\),.*_\1_' | xargs kill
1
27.01.2020, 23:10

Используя ss, мы можем получить подробную информацию о процессах/соединениях, которые прослушивают определенный IP-адрес и порт, для src 127.0.0.1и порта 80:

.
sudo ss -lp  '( dport = :80 )' src 127.0.0.1

тогда мы можем получить только PIDс помощью grepи убить их всех с помощью xargsи kill.

sudo ss -lp  '( dport = :80 )' src 127.0.0.1 | grep -Po "(?<=pid=).*(?=,)"\
| sort | uniq | xargs kill

Вы также можете использовать переключатель -aвместо -l, чтобы получить список всех прослушивающих и не прослушивающих сокетов -.

5
27.01.2020, 23:10

Единственный IP-адрес, на котором может работать процесс на локальном компьютере, — это 127.0.0.1, lo, петлевое устройство, известное как localhost. Порты могут быть перенаправлены на общедоступный IP-адрес с сетевыми конфигурациями.

Я обычно использую sudo lsof -i :<port>, чтобы узнать, что вызывает EADDRINUSE , потому что так быстрее печатать.

sudo lsof -i :443 | tail -1 | cut -f2 -d' ' | xargs kill

Убьет процесс, работающий на порту 443, если ваш lsofвыдает вывод, подобный:

COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
python3 32233  cat    4u  IPv4 24123106      0t0  TCP *:http-alt (LISTEN)

Изlsof --help:

-i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
-1
27.01.2020, 23:10

Теги

Похожие вопросы