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

时间:2016-06-01 22:52:11

标签: macos shell unix terminal lsof

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

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

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

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

但是,当我运行“killproc 3000”时,我收到以下错误:

lsof: unacceptable port specification in: -i tcp:

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

1 个答案:

答案 0 :(得分:1)

可能涉及双引号。

尝试一下:

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

仅当在指定的端口上没有找到进程侦听时才会打印该消息。

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