之前有人问过,但是如何使用 OpenBSD 来做到这一点呢?我尝试了一些不同的方法,但没有成功。
$ sudo fuser -k 80/tcp
fuser: 80/tcp: No such file or directory
$ kill $(sudo lsof -t -i:80)
sudo: lsof: command not found
usage: kill [-s signame | -signum | -signame] { job | pid | pgrp } ...
kill -l [exit_status ...]
$
答案1
安装 lsof(PKG_PATH 取决于您的操作系统版本):
$ su - root -c \
"PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.8/packages/amd64 pkg_add -r lsof"
lsof-4.88: ok
使用fstat
:
# Start a process (nc) that listens on port 8080
$ nc -l 8080 & bg
[1] 17454
[1] nc -l 8080
# Get the process listening on port 8080:
$ fstat | grep :8080
cmihai nc 17454 3* internet stream tcp 0x0 *:8080
我们可以创建一个函数来获取 pid,如下所示:
$ portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
$ portpid 8080
17454
然后,我们可以杀死侦听端口 8080 的进程,如下所示:
$ kill $(portpid 8080)
[1] + Terminated nc -l 8080
免责声明:
- 此示例中没有错误处理或任何内容 - 除了此处列出的示例之外,我没有进行任何类型的测试。请自行测试并向该函数添加一些错误处理,以避免错误地终止另一个进程。