我在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:
我很难理解这个问题,感谢您的帮助。
答案 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
运行测试并编辑问题以添加生成的输出。