目前,我可以使用以下命令终止端口上运行的进程:
//other scripts that should be executed
...........................
sudo kill $( sudo lsof -i:9005 -t )
...........................
//other scripts that should be executed
Run Code Online (Sandbox Code Playgroud)
现在,我想首先测试端口 9005 是否确实打开,然后只尝试杀死它。如果端口没有打开,我不想执行杀死脚本。我想确保无论端口是打开还是关闭,后续脚本都会执行。所以,我正在寻找类似的东西:
//other scripts that should be executed
.............
<test-if-port-9005-is-open> && sudo kill $( sudo lsof -i:9005 -t )
.............
// other scripts that should be executed
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
小智 5
你可以这样做:
nc -zv 127.0.0.1 9005 && sudo kill $( sudo lsof -i:9005 -t )
Run Code Online (Sandbox Code Playgroud)
如果在提供的端口上 TCP 连接成功,它将终止该进程。然后它继续前进。在 macOS High Sierra 上进行了测试。
lsof -i:9005 -t如果我正确理解你的问题,当端口未打开时,根据定义, 输出将为空。xargsLinux 上有一个选项可以处理这个问题:
sudo lsof -i:9005 -t | xargs -r sudo kill
Run Code Online (Sandbox Code Playgroud)
lsof或者您可以简单地检查;的退出代码 如果没有找到任何要报告的内容,它将是非零以表示错误:
if pids=$(sudo lsof -i:9005 -t); then
sudo kill $pids
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |