我想定义一个名为kill3000
的bash别名来自动执行以下任务:
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 13402 zero 4u IPv4 2847851 0t0 TCP *:3000 (LISTEN)
$ kill -9 13402
答案 0 :(得分:104)
alias kill3000="fuser -k -n tcp 3000"
答案 1 :(得分:43)
试试这个:
kill -9 $(lsof -i:3000 -t)
-t标志是你想要的:它显示PID,没有别的。
如果找不到该进程,并且您不希望看到错误消息:
kill -9 $(lsof -i:3000 -t) 2> /dev/null
假设您正在运行bash。
Basile的建议非常好:我们应该首先尝试终止该过程 kill -TERM ,如果失败,那么 kill -KILL (AKA kill - 9 ):
pid=$(lsof -i:3000 -t); kill -TERM $pid || kill -KILL $pid
您可能希望将其设为bash函数。
答案 2 :(得分:9)
使用原始lsof
命令的另一个选项:
lsof -n -i:3000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs kill -9
如果要在shell脚本中使用它,可以将-r
标志添加到xargs
以处理没有进程正在侦听的情况:
... | xargs -r kill -9
答案 3 :(得分:3)
fuser -n tcp 3000
将产生
的输出3000/tcp: <$pid>
所以你可以这样做:
fuser -n tcp 3000 | awk '{ print $2 }' | xargs -r kill
答案 4 :(得分:3)
怎么样
alias kill3000="lsof -i:3000 | grep LISTEN | awk '{print $2}' | xargs kill -9"
答案 5 :(得分:3)
fuser -k 3000/tcp
也应该有用