如何从“lsof -i:8080”的输出中提取 PID?

如何从“lsof -i:8080”的输出中提取 PID?

每次我需要停止占用 8080 端口的进程时,我必须先运行此命令

$ lsof -i:8080

获取 PID

COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python  4024 ubuntu    3u  IPv4 2181080      0t0  TCP *:http-alt (LISTEN) 

然后我关闭 PID

kill 4024

我想编写一个脚本使其简单,如何从输出中提取 PID lsof -i:8080

答案1

您可以通过管道输出lsof -i:8080awk获取 PID:

lsof -i:8080 | awk 'NR==2 {print $2}'

然后您可以将其与以下项相结合kill

kill $(lsof -i:8080 | awk 'NR==2 {print $2}')

您还可以创建一个 Bash 函数并将其添加到.bashrc

function kill8080()
{
    kill $(lsof -i:8080 | awk 'NR==2 {print $2}')
}

我将上述函数命名为kill8080,但您可以按照自己希望的方式命名。

答案2

使用此-F选项,您可以选择带有标识符的进程 ID p(请参阅“其他程序的输出”中的手册页)。您需要从输出中提取以 开头的行p并跳过第一个字符

pid=$(lsof -n -P -i:8080 -sTCP:LISTEN -Fp |grep "^p"|cut -c2-)

kill $pid

我在命令中添加了一些选项lsof

  • -nlsof通过禁止将网络号转换为主机名来提高运行速度
  • -P-n与端口号相同
  • -sTCP:LISTEN指定您要查找在给定端口上侦听的进程。这很重要,因为否则您将面临杀死不需要的进程的风险!

相关内容