3. QNX 进程崩溃核心转储生成与加载

任务目标

在QNX系统上,使用 pidin -p <pid> 查看指定进程的线程列表、内存映射及CPU占用等详细信息,并理解输出中关键字段的含义。

环境准备

QNX Neutrino 目标机(或QNX SDP中的QEMU虚拟机),已启动shell。无需额外安装工具,pidin 为系统自带命令。

操作与验证

选择一个实际运行的进程(例如 pidin 自身或 slogger2),执行以下命令查看其详细信息:

# 先获取目标进程的PID(以 slogger2 为例)
pidin | grep slogger2

# 假设输出中 slogger2 的PID为 12345,则执行:
pidin -p 12345

若不确定PID,可直接用 pidin -p $(pidin | awk '/slogger2/{print $1; exit}') 一步完成。

验证通过条件:命令输出包含以下区块,且各字段与进程实际状态一致:

  • 线程列表:每个线程一行,显示TID、优先级、状态(如 RUN/RECEIVE/NANOSLEEP)、CPU时间等;
  • 内存映射:列出进程地址空间中的各段(代码、数据、栈、共享库等),含起始地址、大小、权限标志;
  • CPU占用:若进程正在运行,可观察到线程状态为 RUN,且CPU时间字段持续增长。

关键输出解读

以 pidin -p 12345 的典型输出片段为例:

pid 12345 (slogger2)      pri  10
  tid 1     pri 10        RUN      0:00:00.0012
  tid 2     pri 10        RECEIVE  0:00:00.0000
  ...
  Memory:  code 0x08048000-0x0805a000   data 0x0805a000-0x0805c000
           stack 0xbffff000-0xc0000000   libc.so 0xb7700000-0xb77e0000
  • tid:线程ID;pri:当前优先级;
  • 状态列:RUN 表示正在CPU上执行,RECEIVE 表示阻塞等待消息,NANOSLEEP 表示定时睡眠;
  • 最后一列为该线程累计CPU时间(时:分:秒.微秒);
  • Memory 行显示各内存区间的地址范围,code 为可执行代码段,data 为已初始化数据段,stack 为线程栈,共享库以库文件名标注。

常见问题

  • 权限不足:查看其他用户进程时可能需要root权限,加 sudo 执行;
  • PID不存在:若进程已退出,命令会提示 pidin: cannot find pid xxx,此时重新获取有效PID即可;
  • 输出过长:内存映射段较多时可配合 | less 分页查看。

通过上述步骤,即可快速定位指定进程的线程调度状态、内存布局与CPU消耗,为后续性能分析提供基础数据。