如何根据端口查找进程并将其全部删除?

yli*_*yli 63 bash shell

根据端口号查找进程并将其全部删除.

ps -efl | grep PORT_NUMBER | kill -9 process_found_previously
Run Code Online (Sandbox Code Playgroud)

如何完成最后一栏?

Sha*_*hin 112

问题ps -efl | grep PORT_NUMBERPORT_NUMBER可以匹配输出中的其他列ps(日期,时间,pid,...).如果由root运行,可能会发生杀戮!

我会这样做:

PORT_NUMBER=1234
lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill 
Run Code Online (Sandbox Code Playgroud)

命令细分

  • (lsof -i tcp:${PORT_NUMBER}) - 列出正在侦听该tcp端口的所有进程
  • (awk 'NR!=1 {print $2}') - 忽略第一行,打印每行的第二列
  • (xargs kill) - 将结果作为参数传递给kill.可能有几个.

  • 这很棒.现在有一个可爱的小别名:`killport(){lsof -i tcp:$ 1 | awk'NR!= 1 {print $ 2}'| xargs kill}`端口杀死现在只是写例如:`killport 3984` (7认同)
  • 请看下面的DanS答案(http://stackoverflow.com/a/12295745/67824).如果你使用`-it`选项那么你可以不使用`awk`:*-t指定lsof应该只生成带有进程标识符的简洁输出而没有标题 - 例如,输出可能是用管道输送(1).*.不用说,这将是一种更好,更可靠的方法. (3认同)

the*_*unt 24

1.) lsof -w -n -i tcp:8080

2.) kill -9 processId

  • 在这里多次说过,不要使用`kill -9`,只是尝试`kill`或者使用`kill -15`什么是SIGTERM,如果不行,最后用`kill -9`强制它. (3认同)

小智 18

建议使用fuser命令:

fuser -k -TERM -n tcp ${PORT_NUMBER}
Run Code Online (Sandbox Code Playgroud)

  • 此fuser命令在Mac OS X中不起作用,但Shawn的lsof命令确实:) (2认同)

Dan*_*anS 15

kill $( lsof -i:6000 -t )
Run Code Online (Sandbox Code Playgroud)

或者如果您需要权限:

sudo kill $( sudo lsof -i:6000 -t )
Run Code Online (Sandbox Code Playgroud)


NVR*_*VRM 7

sudo fuser -k 8080/tcp

一个容易记住的人.

这个语法可能比问题的日期更新!


vmp*_*str 5

... | awk '{ print $4 }' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

请在运行前使用“echo”而不是“kill”进行测试

  • 请不要使用“kill -9”http://partmaps.org/era/unix/award.html#uuk9letter (5认同)