Убить все процессы, связанные с портом

Убейте все процессы на порту 3000. Это то, что пробовали:

ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632007      18200/node      
ubuntu@111:~/chatapp$ sudo kill 18200
ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632207      18349/node      
ubuntu@111:~/chatapp$ sudo killall node
ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632364      18414/node      
ubuntu@111:~/chatapp$ 

3 ответа

Вы можете использовать следующую команду, чтобы получить только pid:

sudo netstat -peanut | grep 3000 | awk '{ print $9 }' | sed 's:/[^/]*$::' | grep -Eo '[0-9]{1,5}'

awk Команда получает 9-е поле.

sed команда получает pid перед косой чертой.

И команда grep возвращает только цифры для удаления лишних строк.

Здесь вы можете просто иметь цикл и убивать процессы.

Некоторые программы не будут отображаться, если вы не запустите netstat с судо. Сравните эти два прогона:

$ netstat -natp | grep tcp6                                                                           
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::25                   :::*                    LISTEN      -               
tcp6       0      0 :::445                  :::*                    LISTEN      -               
tcp6       0      0 :::139                  :::*                    LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN 



$ sudo netstat -natp | grep tcp6                                                                      
[sudo] password for xieerqi: 
tcp6       0      0 :::25                   :::*                    LISTEN      1522/master     
tcp6       0      0 :::445                  :::*                    LISTEN      770/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      770/smbd        
tcp6       0      0 :::22                   :::*                    LISTEN      1190/sshd 

Что касается уничтожения процесса, связанного с самим портом, то это простой случай парсинга вывода из netstat (что может сделать awk) и передать вывод этой команды в xargs -I {} kill -TERM {},

Вот как можно проанализировать вывод с awk, По умолчанию awk использует пробелы для разделения выходных данных на поля, поэтому я должен циклически перебирать все поля (из-за нескольких пробелов awk считает, что между реальным текстом есть несколько полей).

$ sudo netstat -natp | awk '/:53579/{sub(/\//," ");for(i=1;i<=NF;i++){\                                    
> if($i~/ESTABLISHED/||/LISTEN/||/CLOSE WAIT/) print $(i+1)}}'                                                        
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
5027

Остальное будет просто

that_command_above | xargs -I {} kill -TERM  {}

использовать killport

killport можно скачать отсюда используя это:

wget https://raw.githubusercontent.com/abdennour/miscs.sh/master/killport

sh killport 3000

Другой способ можно использовать это:

sudo kill -9 3000

Другие вопросы по тегам