Pum*_*eed 2 lsof pid kill-process
我有一个 react-native 应用程序,我想为开始测试版本编写一个脚本。如果 :8081 端口还活着,我需要击落它。命令:
lsof -i :8081
kill -9 <PID>
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我真正需要的是节点服务的 pid 16210。如何从 lsof 获取它?
我lsof -ti :8081
试过只返回pids,但它返回所有。我试图用 grep: 扩展它lsof -ti :8081 | grep node
,它什么都不返回。
所以我只需要进程 id,就可以将它放入kill -9 $PID
.
我认为您的整个方法有缺陷,您可能应该在 systemd 下运行您的服务(或将其包装在记录 PID 的 systemV 样式启动-停止脚本中),这将大大简化停止正确服务的过程。
或者,查找特定进程的常规工具是pgrep
,相关联的工具pkill
可让您轻松杀死它们:
pkill -9 -u node react-native-app-name
Run Code Online (Sandbox Code Playgroud)
话虽如此,要回答您的字面问题:通常要停止的正确服务进程是在该 TCP 端口上提供侦听器的服务进程,即限制您的lsof
输出-sTCP:LISTEN
lsof -i :8081 -sTCP:LISTEN |awk 'NR > 1 {print $2}' |xargs kill -15
Run Code Online (Sandbox Code Playgroud)
小智 8
最简单的杀人方式——
kill $(lsof -ti:8081)
Run Code Online (Sandbox Code Playgroud)
这将自动终止循环中获取的所有进程 ID。
仅终止侦听端口的进程 -
kill $(lsof -t -sTCP:LISTEN -i:8081)
Run Code Online (Sandbox Code Playgroud)
小智 5
lsof -i :8081 | awk '{system("kill -9 " $2)}'
Run Code Online (Sandbox Code Playgroud)
应该做你想做的事。不过,在具有大量短期进程的负载非常高的系统上要小心。可能是您杀死了错误的进程,因为有时 lsof 的输出随着时间的推移被证明不太可靠。
归档时间: |
|
查看次数: |
10175 次 |
最近记录: |