通过awk获取netstat命令中的进程号

本文介绍在Linux环境下如何使用命令行工具获取特定进程的信息并进行管理,包括获取进程ID、筛选特定进程及批量终止进程等实用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要如下:

获取进程号

通过这个命令,总共有7列

由此可知,需要输出第7列

> 把输出内容放到你的文件中,(前清空在输入)
>>同上(但是表示追加)

 

http://www.cnblogs.com/xudong-bupt/p/3721210.html

 

实例二:

获取ip地址:获取192.168.1.244

我想获取IP地址中的244数字

 

实例3:

获取所有java进程的进程pid

方法1:

ps -ef | grep java | cut -c 9-15 | args kill -9

管道符Linux里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep LOCAL=NO"的输入。

"grep LOCAL=NO" 的输出结果是,所有含有关键字"LOCAL=NO"的进程。

"grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程。

"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。

"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。

 

方法2:

ps -ef | grep java | grep -v grep | awk '{print "kill -9 " $2}' |sh

ps -ef|grep boco|grep -v grep|awk '{print "kill -9 "$2}'
kill -9 9884
kill -9 9883
kill -9 11112
kill -9 11126
kill -9 11125
kill -9 9811
kill -9 11113

我们可以看出

ps -ef|grep boco|grep -v grep列出了当前主机中运行的进程中包含boco关键字的进程

ps -ef|grep boco|grep -v grep|awk '{print "kill -9 "$2}'则列出了要kill掉这些进程的命令,并将之打印在了屏幕上

ps -ef|grep boco|grep -v grep|awk '{print "kill -9 "$2}'后面加上|sh后,则执行这些命令,进而杀掉了这些进程。

方法3:

ps -ef | grep gas | grep -v grep | awk '{print $1}' | xargs kill -9

 


我采用的是连续grep来过滤的,你可以用你的关键字来层层过滤免得多杀了其他进程,比如要杀死我的tomcat进程,脚本如下:

 

 

转载于:https://www.cnblogs.com/qmfsun/p/6550247.html

<think>我们有一个问题:如何通过进程ID或名称查找占用的端口号?根据提供的引用,我们可以总结不同操作系统的命令:引用[1]和[2]是关于Linux系统的:-引用[1]:使用`lsof-i:<端口号>`或者 `netstat`来查找端口对应的进程(但这里我们是要通过进程找端口,所以需要调整)-引用[2]:在Linux下查看进程占用端口:(1)查看程序对应的进程号:`ps -ef |grep进程名字`(2)查看进程号所占用的端口号:`netstat -nltp |grep进程号`引用[3]和[4]是关于Windows系统的:-引用[3]:查找占用端口的进程ID(PID)使用`netstat -ano|findstr端口号`,然后通过PID找进程名称:`tasklist |findstrPID`但是这里我们是要通过进程找端口,所以需要反过来:先通过进程名得到PID,再通过PID找端口。-引用[4]:同样使用`netstat-ano| findstr ":端口号"`,然后终止进程。但我们这里需要的是通过进程找端口。引用[5]:关于Mac系统,和Linux类似,可以使用`lsof`或者`netstat`。因此,我们可以按照操作系统分类:目标:通过进程ID(PID)或进程名称查找该进程占用的端口号。一、Linux和 Mac系统(类Unix系统)方法1:使用`lsof`命令通过进程ID(PID)查找:`lsof-Pan-p<PID>-i`或者更精确地:`lsof-i-a-p<PID>` (-a表示与条件)通过进程名称查找(先得到PID,再用上述命令):先通过进程获取PID:`pgrep <进程名>`或者 `pidof <进程名>`或者 `ps -ef |grep <进程名>`然后使用`lsof-i -a -p <PID>`或者直接通过进程名使用lsof:`lsof-i|grep <进程名>`方法2:使用`netstat`命令通过进程ID(PID)查找:`netstat-tulpn| grep<PID>`通过进程名称查找(需要先获取PID):先获取PID(同上),然后使用`netstat-tulpn| grep<PID>`注意:可能需要sudo权限才能查看其他用户的进程。二、Windows系统方法1:通过进程ID(PID)查找端口`netstat-ano| findstr <PID>`方法2:通过进程名称查找端口先通过进程获取PID:`tasklist| findstr <进程名>`然后使用:`netstat -ano |findstr<PID>`下面我们给出具体步骤:步骤1:确定操作系统。步骤2:根据操作系统选择命令。详细命令: Linux/Mac:情况A:已知进程ID(PID)命令:`lsof-Pan-p<PID> -i`或`netstat -tulpn |grep <PID>`情况B:已知进程名称(需要先获取PID)步骤1:获取进程PID例如:`pidof<进程名>`或`pgrep <进程名>`如果上述命令不可用,则使用:`ps-ef| grep<进程名>| grep-vgrep |awk '{print $2}'`步骤2:使用PID查询端口(同情况A)或者,使用一条命令(通过进程名):`lsof -i |grep <进程名>`Windows:情况A:已知进程ID(PID)命令:`netstat -ano |findstr<PID>`情况B:已知进程名称步骤1:获取PID:`tasklist| findstr <进程名>`注意:进程名通常是可执行文件名,如java.exe, mysqld.exe等。步骤2:使用PID查询端口:`netstat-ano| findstr <PID>`注意:在Windows中,netstat输出的最后一列是PID,我们可以通过PID来过滤。举例: Linux(已知进程名为nginx):1.获取nginx的PID:`pidof nginx`假设输出为12342.查看端口:`lsof -Pan -p1234-i`或 `netstat-tulpn| grep1234`或者直接:`lsof -i |grep nginx`Windows(已知进程名为java.exe):1.获取PID:`tasklist |findstrjava.exe`假设输出中有一行:java.exe12342.查看端口:`netstat-ano| findstr1234`注意:在Linux/Mac中,使用netstat时,可能需要安装(net-tools),而lsof也需要安装。但通常这些工具在服务器系统中已预装。另外,在Mac中,netstat命令可能和Linux略有不同,但lsof是通用的。总结命令:操作系统 |已知条件 |命令--------|---------|-----Linux/Mac |PID |`lsof -Pan -p <PID>-i`或 `netstat-tulnp| grep<PID>` Linux/Mac|进程名| `lsof-i| grep<进程名>`或先获取PID(`pidof <进程名>`)再执行上述PID命令Windows |PID |`netstat -ano |findstr<PID>`Windows |进程名 |先获取PID(`tasklist| findstr <进程名>`),再执行`netstat -ano |findstr<PID>`注意:在Linux/Mac中,如果使用netstat,选项`-tulnp`表示:-t: TCP-u: UDP-l:正在监听的-n:数字形式(不解析服务名)-p:显示进程信息但有时我们可能想查看所有端口(包括已建立的连接),那么可以去掉`-l`选项,使用`-tunp`。因此,根据需求调整。最后,我们按照用户要求,生成相关问题。</think>### 通过进程查找占用端口号的方法 根据您的需求,以下是不同操作系统下通过**进程ID(PID)或进程名称**查找占用端口号的操作指南: --- #### **一、Linux/Mac 系统** ##### 方法 1:通过进程名称查找端口号 1. **获取进程ID**: ```bash ps -ef | grep <进程名> # 例如:ps -ef | grep nginx ``` ![Linux 进程查询](https://example.com/linux-ps.png) 输出示例: `root 12345 1 0 10:00 ? 00:00:00 nginx` → **PID=12345** 2. **查询端口号**: ```bash netstat -tulnp | grep <PID> # 例如:netstat -tulnp | grep 12345 ``` ![Linux 端口查询](https://example.com/linux-netstat.png) 输出示例: `tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12345/nginx` → **占用 80 端口** ##### 方法 2:直接通过进程名称查询 ```bash sudo lsof -i -P -n | grep <进程名> # 例如:sudo lsof -i -P -n | grep java ``` 输出示例: `java 12345 root 128u IPv6 0xabcd 0t0 TCP *:8080 (LISTEN)` → **占用 8080 端口** > **注意**: > - `lsof` 需安装:`sudo apt install lsof`(Ubuntu)或 `brew install lsof`(Mac)[^1][^5] > - `-P -n` 禁用端口名解析(直接显示数字端口) --- #### **二、Windows 系统** ##### 方法 1:通过进程名称查找端口号 1. **获取进程ID**: ```cmd tasklist | findstr <进程名> # 例如:tasklist | findstr java.exe ``` ![Windows 进程查询](https://example.com/win-tasklist.png) 输出示例: `java.exe 12345 Console 1 1,234 K` → **PID=12345** 2. **查询端口号**: ```cmd netstat -ano | findstr <PID> # 例如:netstat -ano | findstr 12345 ``` ![Windows 端口查询](https://example.com/win-netstat.png) 输出示例: `TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 12345` → **占用 8080 端口** ##### 方法 2:通过进程ID直接查询 ```cmd netstat -ano | findstr ":<端口号>" # 例如:netstat -ano | findstr ":80" ``` 输出示例: `TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 12345` → **PID=12345 占用 80 端口** --- ### 关键命令总结 | 操作系统 | 目标 | 命令 | |----------|---------------|--------------------------------------| | Linux/Mac| 进程名 → 端口 | `lsof -i \| grep <进程名>` | | Linux/Mac| PID → 端口 | `netstat -tulnp \| grep <PID>` | | Windows | 进程名 → 端口 | `tasklist \| findstr <进程名>` + `netstat -ano \| findstr <PID>` | | Windows | PID → 端口 | `netstat -ano \| findstr <PID>` | > ⚠️ **注意事项**: > - Linux/Mac 需 root 权限查看系统进程命令前加 `sudo`)[^1][^5] > - Windows 需管理员权限运行 CMD/PowerShell[^3][^4] > - 端口号可能被多个进程共享(如 Docker 容器) --- #### **相关问题** 1. 如何强制终止占用特定端口的进程? 2. Linux 中 `netstat` 和 `lsof` 查询端口的区别是什么? 3. Windows 系统如何查看进程的完整路径? 4. 如何检测端口是否被恶意程序占用? [^1]: Linux 下通过 `lsof` 或 `netstat` 查找端口占用进程的方法 [^2]: Linux 下通过进程获取 PID 再查询端口的流程 [^3]: Windows 下通过 `tasklist` 和 `netstat` 的联合查询 [^4]: Windows 下通过端口号反向查找 PID 的操作 [^5]: Mac/Linux 下 `kill` 命令终止进程的语法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值