2. 使用pidin -F过滤进程信息

任务目标

在QNX系统上,pidin是查看进程与系统状态的核心工具。当系统运行大量进程时,完整输出会淹没关键信息。本案例目标是通过pidin -F的过滤语法,实现按进程名、PID或状态精确筛选进程信息,并验证过滤结果正确。

核心命令与过滤语法

pidin -F使用类似SQL的where子句进行过滤,基本格式为:

pidin -F "字段 操作符 值 [逻辑操作符 字段 操作符 值]"

常用字段包括:pid(进程ID)、name(进程名)、state(进程状态,如RUN/READY/NANOSLEEP等)。支持的操作符有=、!=、>、<、~(匹配子串)。逻辑操作符为and、or。

关键完整代码(Shell命令示例)

# 1. 按进程名精确过滤(查找名为pci-server的进程)
pidin -F "name = pci-server"

# 2. 按进程名模糊匹配(查找名称包含"dev"的进程)
pidin -F "name ~ dev"

# 3. 按PID过滤(查找PID为12345的进程)
pidin -F "pid = 12345"

# 4. 按状态过滤(查找所有处于RUN状态的进程)
pidin -F "state = RUN"

# 5. 组合过滤:查找名为"io-usb"且状态为RUN的进程
pidin -F "name = io-usb and state = RUN"

# 6. 组合过滤:查找PID大于1000且名称包含"dev"的进程
pidin -F "pid > 1000 and name ~ dev"

运行方式与验证方法

运行环境:QNX Neutrino 6.6.0及以上版本(pidin为系统自带工具,无需额外安装)。在QNX Shell(如qsh)中直接执行上述命令。

验证步骤:

  1. 先执行不带过滤的pidin,观察完整进程列表,确认目标进程(如pci-server)确实存在。
  2. 执行pidin -F "name = pci-server",预期输出仅包含该进程的一行信息,且NAME列显示为pci-server。
  3. 执行pidin -F "state = RUN",检查输出中所有进程的STATE列均为RUN。
  4. 执行组合过滤pidin -F "name = io-usb and state = RUN",确认输出行同时满足两个条件。

判定标准:每条过滤命令返回的行数少于完整pidin输出,且返回的每一行均严格匹配过滤条件(可通过人工核对PID/NAME/STATE列确认)。若过滤结果为空,请检查进程名拼写或状态值是否正确(可用pidin完整输出中的实际值对照)。

常见问题

  • 过滤无输出:确认进程名大小写完全一致(QNX进程名区分大小写),或改用~做模糊匹配。
  • 状态值不匹配:用pidin完整输出查看实际状态缩写(如NANOSLEEP而非SLEEP),再填入过滤条件。
  • 语法错误:过滤表达式必须用双引号包裹,字段名与操作符之间需有空格。
pidin -F 过滤逻辑示意 完整进程列表 pid=1 init pid=2 pci-server pid=3 io-usb pid=4 dev-serial pid=5 dev-eth 过滤条件 name ~ "dev" and state = RUN 过滤结果 pid=4 dev-serial pid=5 dev-eth 仅显示匹配条件的行 (名称含dev且状态为RUN) pidin -F "name ~ dev and state = RUN"

说明:上述SVG示意了过滤前后数据集的对应关系——左侧为系统全部进程,中间为过滤条件,右侧为满足条件的子集。实际使用时,pidin输出格式为表格形式,包含PID、NAME、STATE等列,过滤后仅保留匹配行。