从 lsof 列表获取 PID

从 lsof 列表获取 PID

我有一个 react-native 应用程序,我想编写一个脚本来启动测试版本。如果 :8081 端口处于活动状态,我需要关闭它。命令:

lsof -i :8081
kill -9 <PID>

lsof 返回此结果:

    COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chrome     2423 loow  127u  IPv4 13749099      0t0  TCP localhost.localdomain:36650->localhost.localdomain:tproxy (ESTABLISHED)
qemu-syst 15091 loow   64u  IPv4 13795587      0t0  TCP localhost.localdomain:43518->localhost.localdomain:tproxy (ESTABLISHED)
qemu-syst 15091 loow   66u  IPv4 13795588      0t0  TCP localhost.localdomain:43520->localhost.localdomain:tproxy (ESTABLISHED)
qemu-syst 15091 loow   89u  IPv4 13777485      0t0  TCP localhost.localdomain:40500->localhost.localdomain:tproxy (ESTABLISHED)
node      16210 loow   16u  IPv6 13747716      0t0  TCP *:tproxy (LISTEN)
node      16210 loow   18u  IPv6 13751322      0t0  TCP localhost.localdomain:tproxy->localhost.localdomain:36650 (ESTABLISHED)
node      16210 loow   19u  IPv6 13798473      0t0  TCP localhost.localdomain:tproxy->localhost.localdomain:43518 (ESTABLISHED)
node      16210 loow   21u  IPv6 13798475      0t0  TCP localhost.localdomain:tproxy->localhost.localdomain:43520 (ESTABLISHED)
node      16210 loow   27u  IPv6 13777958      0t0  TCP localhost.localdomain:tproxy->localhost.localdomain:40500 (ESTABLISHED)

我真正需要的是节点服务的 pid(在本例中为 16210)。我如何从 lsof 获取它?

我尝试lsof -ti :8081只返回 pid,但它返回了所有内容。我尝试使用 grep: 来扩展它,lsof -ti :8081 | grep node但它什么也不返回。

所以我只需要进程 id,就可以将其带入kill -9 $PID

答案1

我认为你的整个方法都是有缺陷的,你应该在 systemd 下运行你的服务(或者将其包装在记录 PID 的 systemV 风格的启动-停止脚本中),这将大大简化停止正确的服务。

另外,查找特定进程的常规工具是pgrep并且相关功能pkill可以让你轻松杀死它们:

pkill -9 -u node  react-native-app-name

话虽如此,回答你的字面问题:一般来说,要停止的正确服务进程是那些在该 TCP 端口上提供侦听器的服务进程,即lsof使用以下方式限制你的输出-sTCP:LISTEN

lsof -i :8081 -sTCP:LISTEN |awk 'NR > 1 {print $2}'  |xargs kill -15

答案2

最简单的杀戮方式——

kill $(lsof -ti:8081)

这将自动终止循环中获取的所有进程 ID。

只终止监听端口的进程 -

kill $(lsof -t -sTCP:LISTEN -i:8081)

答案3

lsof -i :8081 | awk '{system("kill -9 " $2)}'

应该可以做你想做的事。不过,在负载非常高、有很多短命进程的系统上要小心。你可能杀死了错误的进程,因为有时 lsof 的输出随着时间的推移被证明不太可靠。

相关内容