在 shell 函数中将端口号传递给 lsof

Passing a port number to lsof in a shell function

我在我的 bash 配置文件中写了一个别名,以帮助我杀死未完全关闭的流氓 rails 服务器进程。这个别名很好用。

alias kill3000="lsof -i tcp: 3000 -t | xargs kill -9 | echo 'killed processes on port 3000'"

我想让它更通用,适用于在其他端口上工作的框架。我试图做一个类似的函数,所以我可以将端口号作为变量传递,但是我得到了一个错误。我写的函数是这样的...

function killproc (){
    "lsof -i tcp: -t | xargs kill -9 | echo 'killed processes on port '"
}

但是,当我 运行 "killproc 3000" 时,出现以下错误:

lsof: unacceptable port specification in: -i tcp:

我很难理解这个问题,感谢您的帮助。

可能涉及双引号。

试试这个:

function killproc (){
    lsof -i tcp:"" -t | xargs kill -9
    lsof -i tcp:"" -t 2>/dev/null >/dev/null || printf "killed processes on port %s\n" ""
}

仅当找不到更多进程侦听指定的端口时才会打印该消息。

如果遇到问题,请按照@shellter 的说明进行操作。 运行 使用 set -vx ; killproc 300 ; set +vx 进行测试并编辑问题以添加生成的输出。