我想知道有什么办法可以杀死在特定IP上运行的进程和Ubuntu 14.04 上的本地 IP 和端口上的端口?最好是在一个命令中,但如果没有,bash 脚本也完全可以。
答案1
可能有更干净的方法,但大致如下:
netstat -lnp | grep 'tcp .*127.0.0.1:9984' | sed -e 's/.*LISTEN *//' -e 's#/.*##' | xargs kill
答案2
使用ss
我们可以获取正在侦听特定 IP 和端口(对于 src127.0.0.1
和 port )的进程/连接的详细信息80
:
sudo ss -lp '( dport = :80 )' src 127.0.0.1
那么我们只能PID
使用 来获取 并使用和grep
杀死它们。xargs
kill
sudo ss -lp '( dport = :80 )' src 127.0.0.1 | grep -Po "(?<=pid=).*(?=,)"\
| sort | uniq | xargs kill
您还可以使用-a
switch 而不是-l
来获取所有侦听和非侦听套接字的列表。
答案3
fuser
Linux 上有一个选项可以完全满足您的要求。
例如,fuser 80/tcp
将打印绑定在该端口上的进程的 PID 并fuser -k 80/tcp
杀死该进程。
答案4
本地计算机上的进程可以运行的唯一 IP 是127.0.0.1
, lo
,环回设备,称为localhost
。那里的端口可以通过网络配置转发到公共IP地址。
我通常用来sudo lsof -i :<port>
查看是什么导致了EADDRINUSE因为打字速度更快。
sudo lsof -i :443 | tail -1 | cut -f2 -d' ' | xargs kill
lsof
如果您给出如下输出,将终止在端口 443 上运行的进程:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 32233 cat 4u IPv4 24123106 0t0 TCP *:http-alt (LISTEN)
从lsof --help
:
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]