Иногда мне нужно убить определенный процесс, который прослушивает известный порт, чтобы освободить этот порт.
Когда я выполняю sudo lsof -n -i :1084
, чтобы получить PID процесса, прослушивающего порт 1084
, я получаю следующий результат
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1603 pi 11u IPv4 26101 0t0 TCP *:1084 (LISTEN)
sshd 1603 pi 12u IPv6 26102 0t0 TCP *:1084 (LISTEN)
С помощью grep -P 'IPv4.+LISTEN'
я могу получить строку, где процесс прослушивает этот порт, используя IPv4
проведение
sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN'
возвращается
sshd 1603 pi 11u IPv4 26101 0t0 TCP *:1084 (LISTEN)
Как я могу теперь получить, 1603
чтобы я мог передать это kill
?
Я пытался с grep, sed ( sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN' | sed -E 's/sshd\ +(\d+)\ /\1/g'
), но я просто не знаю как.
Должна быть команда, sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN' | xargs --no-run-if-empty kill {$second_argument}'
которая позволила бы мне сохранить эту цель, какие-либо идеи?
Кроме того, если это не решение sed
, на что будет sed
похоже решение, использующее (я мог бы использовать это в других случаях)?
Ответы:
Как теперь я могу получить 1603, чтобы передать это, чтобы убить?
Это работа для
awk
:Дальнейшее чтение
источник