Linux删除某个端口进程的多种方法

前言

在操作linux系统时,我们经常需要删除掉某个端口的进程。一般过程就是查询出占用该端口的进程,然后通过进程的PID将其kill掉

kill命令

Linux kill 命令用于删除执行中的程序或工作。

kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。

使用 kill -l 命令列出所有可用信号。

最常用的信号是:

1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。

方式一:lsof命令

使用lsof,如果出现以下提示,那么说明没有安装lsof命令

-bash: lsof: 未找到命令

使用以下命令进行安装即可:

yum install lsof

1、查看占用端口进程的PID

lsof -i:{端口号}

实例:

[root@localhost sbin]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1336 nobody    6u  IPv4  28160      0t0  TCP *:http (LISTEN)
nginx   4168 nobody    6u  IPv4  28160      0t0  TCP *:http (LISTEN)
nginx   4169 nobody    6u  IPv4  28160      0t0  TCP *:http (LISTEN)

2、根据PID kill掉相关进程,直接使用kill无法删除时,再用kill -9进行删除

kill -9 {PID}

实例

[root@localhost sbin]# kill -9 1336

方式二:netstat命令

1、查看占用端口进程的PID

netstat -tunlp|grep {port}

实例:

[root@localhost sbin]# netstat -tunpl |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8197/nginx: master  
tcp6       0      0 :::80                   :::*                    LISTEN      8197/nginx: master  

实例所示的8197即是PID

2、根据PID kill掉相关进程

kill -9 {PID}

方式三:使用ps

如果只知道某个进程的名称,那么使用ps也可以得到该进程的PID

使用以下命令即可,{name}表示你要查找的进程名

 ps -aux | grep {name}

注:你还可以将{name}换成{PID},即可以查到相关PID的进程

返回结果参数如下:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

返回结果第二例即是PID

实例:

 ps -aux |grep nginx

返回:

common   10746  0.0  0.0  18584   576 ?        Ss   Jun11   0:00 nginx: master process ./nginx

如果你不想那么麻烦,你还可以直接使用pgrep命令,该命令直接返回进程的PID

实例:

 pgrep nginx

返回

10746
25645

获取到PID之后,直接Kill掉即可

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个可以实现您要求的脚本。注意,这个脚本需要使用 sudo 权限执行,因为它需要访问系统底层的信息。 ```bash #!/bin/bash # 查看所有已经使用的端口 echo "Using netstat:" netstat -tulpn echo # 查看所有正在运行的 Docker 容器使用的端口 echo "Using Docker:" docker ps --format '{{.Names}}: {{.Ports}}' echo # 查看所有在 Kubernetes 集群中的 Pod 使用的端口 echo "Using Kubernetes:" kubectl get pods --all-namespaces -o jsonpath='{.items[*].spec.containers[*].ports[*].containerPort}' ``` 执行这个脚本之后,您将能够看到所有使用的端口。使用 netstat 命令可以查看系统中所有已经使用的端口,使用 Docker 命令可以查看所有正在运行的 Docker 容器使用的端口,使用 Kubernetes 命令可以查看所有在 Kubernetes 集群中的 Pod 使用的端口。 ### 回答2: 以下是一个可以查看k8s和docker所有占用的端口号的Linux脚本: ```shell #!/bin/bash # 首先获取k8s的所有Pod列表 k8s_pods=$(kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}') # 遍历每个Pod,获取其IP地址和端口号 for pod in $k8s_pods; do pod_ip=$(kubectl describe pod $pod --namespace $(kubectl get pods -o jsonpath="{.items[?(@.metadata.name=='$pod')].metadata.namespace}") | grep IP: | awk '{print $2}') echo "Kubernetes Pod: $pod" echo "IP地址: $pod_ip" # 获取Pod的网络命名空间 pid=$(kubectl get pod $pod --namespace $(kubectl get pods -o jsonpath="{.items[?(@.metadata.name=='$pod')].metadata.namespace}") -o jsonpath="{.metadata.annotations['kubernetes\.io/config\.mirror']}" | awk -F / '{print $(NF)}') # 使用nsenter进入网络命名空间,查找该命名空间下所有的端口号 sudo nsenter -t $pid -n ss -tln | awk 'NR>1 {split($4,arr,":"); print arr[length(arr)]}' done # 获取所有的docker容器ID docker_containers=$(docker ps -q) # 遍历每个容器,获取其IP地址和端口号 for container in $docker_containers; do container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container) echo "Docker容器: $container" echo "IP地址: $container_ip" # 使用docker exec进入容器,查找该容器下所有的端口号 sudo docker exec $container ss -tln | awk 'NR>1 {split($4,arr,":"); print arr[length(arr)]}' done ``` 运行该脚本后,会依次输出k8s的每个Pod的名称、对应的IP地址以及占用的端口号;然后输出每个docker容器的ID、对应的IP地址以及占用的端口号。注意运行该脚本需要具有足够的权限,可能需要使用sudo命令。 ### 回答3: 要编写一个Linux脚本来查看K8s和Docker所有占用的端口号,包括无法通过ss和netstat命令找到的端口。 下面是一个示例脚本: ```shell #!/bin/bash # 获取K8s中的所有容器ID k8s_pods=$(kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}') for pod in $k8s_pods; do # 获取容器的PID pid=$(kubectl get pod $pod -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d/ -f3) # 处理容器的网络命名空间 if [ -z "$pid" ]; then continue fi ns_path="/var/run/netns/$pid" if [ ! -e "$ns_path" ]; then mkdir -p "$(dirname "$ns_path")" # 创建目录 ln -s /proc/$pid/ns/net "$ns_path" # 建立软链接 fi # 获取容器的占用端口号 ports=$(nsenter -n -t $pid ss -lntp | awk 'NR>1{print $5}' | cut -d: -f2) if [ -n "$ports" ]; then echo "K8s Pod $pod is using ports $ports" fi rm "$ns_path" # 删除软链接 done # 获取Docker中的所有容器ID docker_containers=$(docker ps -q) for container in $docker_containers; do # 获取容器的占用端口号 ports=$(docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}}{{(index $conf 0).HostPort}} {{end}}' $container) if [ -n "$ports" ]; then echo "Docker Container $container is using ports $ports" fi done ``` 该脚本首先通过kubectl命令获取K8s中的所有容器ID,并使用nsenter命令进入容器的网络命名空间。然后使用ss命令找到容器占用的端口号,最后输出结果。 接下来,脚本使用docker命令获取Docker中的所有容器ID,并使用docker inspect命令获取容器的占用端口号,同样输出结果。 注意,为了运行该脚本,需要确保你拥有足够的权限来执行这些命令,并且在运行脚本之前,确保已经安装了kubectl、nsenter和Docker。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值