kylin@TS-9100GC:~$ ps -ef | grep SmartVoice.py kylin 2599020 1 2 11:41 pts/4 00:00:05 python3 /hera/SmartVoice/SmartVoice.py kylin 2660825 2501353 0 11:44 pts/2 00:00:00 grep --color=auto SmartVoice.py 在脚本中,如何获取SmartVoice.py进程的id号,不要获取grep进程的id号
时间: 2025-06-27 16:07:41 浏览: 14
从你的命令输出来看,`ps -ef | grep SmartVoice.py` 返回了两个匹配项:一个是实际运行的 `SmartVoice.py` 进程,另一个是由 `grep` 自身产生的进程。为了仅获取目标脚本 `SmartVoice.py` 的 PID(进程 ID),我们可以过滤掉由 `grep` 引起的干扰。
以下是几种常见的方法来准确提取 `SmartVoice.py` 的进程 ID:
---
### 方法一:使用 `grep` 和 `awk` 结合
你可以通过管道将结果传递给 `awk` 或者其他的处理工具,并排除包含关键字 “grep” 的行。
#### 示例:
```bash
ps -ef | grep 'SmartVoice.py' | grep -v 'grep' | awk '{print $2}'
```
- 第一步:`ps -ef` 列出所有正在运行的进程信息。
- 第二步:第一个 `grep 'SmartVoice.py'` 筛选出含有该字符串的所有记录。
- 第三步:`grep -v 'grep'` 排除带有 ‘grep’ 字符串的内容(即去掉自身生成的那个无用的 grep 行)。
- 最后一步:`awk '{print $2}'` 提取出第二列内容——也就是我们想要的PID数值。
---
### 方法二:借助正则表达式增强筛选能力
利用更复杂的正则模式进一步限定搜索条件。
例如只查找以 `python3` 启动并且路径完全符合 `/hera/SmartVoice/SmartVoice.py` 格式的进程:
#### 示例:
```bash
pgrep -f '^python3 /hera/SmartVoice/SmartVoice\.py$'
```
此方式直接定位到确切的目标程序而无需手动去除多余的噪音数据如额外生成的小型辅助查询线程等。
注意点:“^”表示开头,“\$”代表结尾;确保特殊字符`.`转义成`\.`以免误解为通配符号。
---
### 方法三:使用 Python 脚本解析
也可以编写一小段Python代码来做这件事儿,尤其当环境里已经安装好了相应库时很方便高效。
#### 示例代码 snippet (适用于Linux/MacOS):
```python
import re
from subprocess import check_output
output = check_output("ps -ef", shell=True).decode()
pattern = r"^\S+\s+(\d+)\s+\S+\s+\S+\s+\S+\s+\S+\s+.*?python3\s+/hera/SmartVoice/SmartVoice.py$"
matches = re.findall(pattern, output, flags=re.MULTILINE)
if matches:
print(matches[0]) # 输出第一个匹配到的有效pid值
else:
print("No such process found")
```
上述片段首先调用了外部命令抓取所有的活动进程列表,接着运用强大的正则引擎精准锁定符合条件的对象最后呈现出来对应的PID编号。
---
以上三种方案都能有效地帮助你获得所需的具体智能语音服务主程序实例ID号啦!
阅读全文
相关推荐


















