每次我需要停止占用 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:8080
来awk
获取 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
:
-n
lsof
通过禁止将网络号转换为主机名来提高运行速度-P
-n
与端口号相同-sTCP:LISTEN
指定您要查找在给定端口上侦听的进程。这很重要,因为否则您将面临杀死不需要的进程的风险!