QNX-8—QNX常用命令—pidin

发布时间 2023-06-13 11:01:19作者: Hello-World3

注:翻译自:http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/p/pidin.html

pidin 显示有关系统中进程的信息 (QNX Neutrino)

一、Syntax:

pidin [-hklv] [-d delay] [-F formats] [-f formats] [-M formats] [-n node] [-o prio] [-P pid] [-p pid] [shorthand ...]

运行于:QNX 中微子


二、Options:

-d delay 使用 -l 选项循环时使用的延迟,以十分之一秒为单位。默认值为 10。比如 pidin -l -d 10 就会每秒执行一次

-F formats 格式代码的组合,就像 printf() 的格式字符串。 每个代码由百分号 (%)、字段的可选宽度和格式字符(例如,“%I %60N”)组成。 有关详细信息,请参阅下面的“Format characters”。如果您不指定任何格式代码,则默认为“%a %b %N %p %J %B”。

-f formats 与 -F 选项相同,但 formats 参数是一个连续的格式代码字符串,可以扩展。 例如,-f mbe 被扩展为 -F "%m %b %e"。

-h 显示简短的使用信息。

-k 继续显示 PID 和 TID 的数据,直到发生错误,例如,遇到处于未知状态的 PID/TID(因为 PID/TID 部分活动)。

-l 循环模式; 每延迟十分之一秒显示统计信息(使用 -d 选项指定)。

-M formats 格式字符的组合,每个字符后跟一个百分号 (%),如 printf() 的格式字符串,它控制有关内存区域的信息的格式。 有关详细信息,请参阅下面的“Memory format characters”。

-n node 从中获取信息的远程节点的名称。

-n 选项与 o 格式或 extsched 和 fds 简写不兼容。 相反,您可以使用 on -f; 例如:on -f remote_node pidin fds

-o prio 以 prio 优先级运行。它还可以用来启动进程吗?

-P pid 仅显示您感兴趣的进程系列(pid 可以是名称或编号)。

-p pid 仅显示您感兴趣的进程(pid 可以是名称或数字)。如果 -P 或 -p 选项的 pid 是一个数字,它被解释为进程 ID; 否则,它被解释为一个名字。 为避免混淆,不要为进程分配数字名称。后面可以跟进程名也可以跟进程PID.

-v (QNX Neutrino 7.0 或更高版本)verbose; 提供取决于格式字符或速记的附加信息,如下所述。

shorthand 代表格式代码或特殊命令的某种组合的名称(如 pidin flags):

abilities
arguments
backtrace
channels
environment
extsched
family
fds
flags
info
irqs
libs
mapinfo
memory
net
pmem
rc
regs
rlimits
rmasks
sched
session
signals
syspage
threads
timers
times
tolerance
ttimes
users

如 pidin -v abilities, pidin sched

您只需键入唯一标识名称所需的字符数。 有关详细信息,请参阅下面的“Shorthand forms”。


三、Description:

pidin 实用程序显示有关在 QNX Neutrino 系统上运行的进程的信息。 它显示的信息量取决于启用的能力(请参阅 C 库参考中的 procmgr_ability()):

如果您没有任何特殊能力,pidin 会显示基本信息。
如果启用 PROCMGR_AID_XPROCESS_QUERY,您将获得更多信息。
如果启用 PROCMGR_AID_XPROCESS_QUERY 和 PROCMGR_AID_XPROCESS_MEM_READ,您将获得完整信息。

该实用程序逐一检查系统中的所有进程,并检索每个进程的状态信息; 它不会在单个快照中获取系统状态。 因此,pidin 的输出反映了它查询每个进程时的瞬间发生的情况,####### 因此您可能会看到一些异常情况,
例如运行的线程数多于系统中的处理器数。

默认情况下,pidin 显示一次统计信息然后退出。 如果指定 -l 选项,pidin 将永远循环,在 -d 选项指定的延迟后显示统计信息。

如果您指定 -l 和 -k 选项,pidin 会循环直到发生错误,并在给定的延迟后显示统计信息。 遇到的最常见的错误是竞争条件:procnto 表明存在一个进程,但是当 pidin 查询它时该进程已经消失了。

与 ps 不同,pidin 列出了僵尸(zombie)进程(参见下面的示例)。


四、Format characters

您可以使用 -F 或 -f 选项指定的格式字符包括:

A 显示参数。

a 显示进程 ID。

B 显示什么阻塞了你。 输出包括一个 Blocked 列,其值取决于线程的状态:

--------------------------------------------------
State               Value
--------------------------------------------------
CONDVAR             condvar的地址
JOIN                正在被阻塞线程的ID
MUTEX               mutex的地址,或者阻塞我们的进程和线程的ID,后跟被锁定的次数,形式为pid-tid #times
RECEIVE             进程中线程被阻塞于的通道的 ID
REPLY               进程 IDa,b
SEM                 信号量的地址
SEND                进程 IDa,b
STACK               堆栈大小
WAITPAGE            页面的虚拟地址
WAITTHREAD          正在被阻塞的线程的线程 ID
--------------------------------------------------

如果进程在远程节点上运行,则进程 ID 后跟 @ 和节点名称。

如果指定 -v 选项,该值还包括进程名称、coid、scoid 和 channel。

b 显示线程 ID。

C 显示进程的子进程之一的进程 ID。 如果您指定 G 格式,则其他子项将列为该子项的兄弟姐妹。 有关进程之间关系的更多信息,请参阅 QNX Neutrino Cookbook 中 /proc 文件系统附录中的““Process information””。

c 显示进程的代码大小。

D 显示进程的调试标志:

------------------------------------------------------------------
Flag                       Value                Meaning
------------------------------------------------------------------
_DEBUG_FLAG_STOPPED        0x00000001           线程未运行
_DEBUG_FLAG_ISTOP          0x00000002           线程在感兴趣的点停止
_DEBUG_FLAG_IPINVAL        0x00000010           指令指针无效
_DEBUG_FLAG_ISSYS          0x00000020           系统进程
_DEBUG_FLAG_SSTEP          0x00000040           因单步执行而停止
_DEBUG_FLAG_CURTID         0x00000080           该线程为当前线程
_DEBUG_FLAG_TRACE_EXEC     0x00000100           因断点而停止
_DEBUG_FLAG_TRACE_RD       0x00000200           因读取访问而停止
_DEBUG_FLAG_TRACE_WR       0x00000400           由于写入访问而停止
_DEBUG_FLAG_TRACE_MODIFY   0x00000800           由于修改内存而停止
_DEBUG_FLAG_RLC            0x00010000           Run-on-Last-Close 标志被设置
_DEBUG_FLAG_KLC            0x00020000           Kill-on-Last-Close 标志已设置
_DEBUG_FLAG_FORK           0x00040000           孩子继承标志(停止在 fork 或 spawn 上)
_DEBUG_FLAG_EXEC           0x00080000          (QNX Neutrino 6.6 或更高版本)在执行时停止
_DEBUG_FLAG_THREAD_EV      0x00100000          (QNX Neutrino 6.6 或更高版本)创建或销毁线程时停止
_DEBUG_FLAG_64BIT          0x00200000           (QNX Neutrino 7.0 或更高版本) 线程在 64 位架构中运行
------------------------------------------------------------------


d 显示进程的数据大小。

E 显示环境。

e 显示父 PID。

F 以十六进制显示线程的标志,如下所示:

------------------------------------------------------------------
Flag                       Value                Meaning
------------------------------------------------------------------
_NTO_TF_INTR_PENDING      0x00010000           线程有一个pending的中断
_NTO_TF_DETACHED          0x00020000           线程分离
_NTO_TF_SHR_MUTEX         0x00040000          (QNX Neutrino 7.0 或更高版本)该线程对与哪些线程共享互斥量没有限制(见下文)
_NTO_TF_SHR_MUTEX_EUID    0x00080000          (QNX Neutrino 7.0 或更高版本)此线程仅与具有相同有效用户 ID 的线程共享互斥(见下文)
_NTO_TF_THREADS_HOLD      0x00100000           线程被挂起
_NTO_TF_UNBLOCK_REQ       0x00400000           有一个unblock pending在这个线程上
_NTO_TF_ALIGN_FAULT       0x01000000           发生对齐错误
_NTO_TF_SSTEP             0x02000000           单步被开启
_NTO_TF_ALLOCED_STACK     0x04000000           已为线程分配堆栈
_NTO_TF_NOMULTISIG        0x08000000           信号不会终止进程中的所有线程
_NTO_TF_LOW_LATENCY       0x100000000          (QNX Neutrino 7.0 或更高版本)线程应安排在与内核当前运行的线程在同一 CPU 上运行。 有关详细信息,请参阅 C 库参考中 ThreadCtl() 条目中的 _NTO_TCTL_LOW_LATENCY。
_NTO_TF_IOPRIV            0x80000000           线程有I/O权限
------------------------------------------------------------------

如果 _NTO_TF_SHR_MUTEX 和 _NTO_TF_SHR_MUTEX_EUID 均未设置,则该线程不会与其进程外的任何线程共享互斥量。

F 以十六进制显示进程的标志,如下所示:

------------------------------------------------------------------
Flag                       Value                Meaning
------------------------------------------------------------------
_NTO_PF_NOCLDSTOP          0x00000001          当其子进程停止时,进程未发送 SIGCHILD 信号
_NTO_PF_LOADING            0x00000002          进程尚未完全加载
_NTO_PF_TERMING            0x00000004          进程正在终止
_NTO_PF_ZOMBIE             0x00000008          进程是一个僵尸进程
_NTO_PF_NOZOMBIE           0x00000010          进程死后不会变成僵尸
_NTO_PF_FORKED             0x00000020          进程是 fork() 的子进程
_NTO_PF_ORPHAN_PGRP        0x00000040          进程是孤儿
_NTO_PF_STOPPED            0x00000080          进程已经停止
_NTO_PF_DEBUG_STOPPED      0x00000100          进程已被调试器停止
_NTO_PF_BKGND_PGRP         0x00000200          进程在后台运行
_NTO_PF_NOISYNC            0x00000400         (QNX Neutrino 7.1 或更高版本)由进程管理器内部使用
_NTO_PF_CONTINUED          0x00000800          进程停止过,但现在已继续
_NTO_PF_CHECK_INTR         0x00001000          进程被附加到了一些中断上
_NTO_PF_COREDUMP           0x00002000          进程写入了核心转储文件
_NTO_PF_RING0              0x00008000          进程在特权管理状态下运行(在某些架构中称为“ring 0”)
_NTO_PF_SLEADER            0x00010000          该进程是会话领导者
_NTO_PF_WAITINFO           0x00020000          进程终止时会产生等待信息
_NTO_PF_DESTROYALL         0x00080000          进程正在被销毁
_NTO_PF_NOCOREDUMP         0x00100000          进程不允许创建core files
_NTO_PF_WAITDONE           0x00400000          进程的终止状态已经被获取,所以再次等待不会成功
_NTO_PF_TERM_WAITING       0x00800000          进程正在等待终止
_NTO_PF_ASLR               0x01000000         (QNX Neutrino 6.6 或更高版本)进程正在使用地址空间布局随机化 (ASLR)
_NTO_PF_EXECED             0x02000000         (QNX Neutrino 6.6 或更高版本)由进程管理器内部使用
_NTO_PF_APP_STOPPED        0x04000000         (QNX Neutrino 7.0 或更高版本)进程已停止
_NTO_PF_64BIT              0x08000000         (QNX Neutrino 7.0 或更高版本)进程运行的代码是为 64 位架构编译的
_NTO_PF_NET                0x10000000         (QNX Neutrino 7.0.1 或更高版本)由 Qnet 使用
_NTO_PF_NOLAZYSTACK        0x20000000         (QNX Neutrino 7.0.4 或更高版本)分配线程时为堆栈保留的内存
_NTO_PF_NOEXEC_STACK       0x40000000         (QNX Neutrino 7.1 或更高版本)该进程不需要可执行堆栈
_NTO_PF_LOADER_PERMS       0x80000000         (QNX Neutrino 7.1 或更高版本)由进程管理器内部使用
------------------------------------------------------------------


G 显示进程的兄弟进程之一的进程 ID。 如果指定 C 格式,pidin 会显示每个进程的子进程之一的进程 ID。 您可以使用子进程和同级信息来确定进程的子进程。 有关进程之间关系的更多信息,请参阅 QNX Neutrino Cookbook 中 /proc 文件
系统附录中的“Process information”。

H (QNX Neutrino 核心操作系统 6.3.2 或更高版本)显示每个线程的调度特定信息。对于自适应分区调度,信息是线程在其中运行的分区的名称。有关详细信息,请参阅自适应分区用户指南。

h (QNX Neutrino Core OS 6.3.2 或更高版本) 显示线程名称; 如果线程没有名称,pidin 会显示线程的 ID (tid)。

I 显示 PID 和 TID,用连字符连接。

i (QNX Neutrino Core OS 6.3.2 或更高版本)显示运行掩码和继承掩码。 有关详细信息,请参阅 QNX Neutrino 程序员指南的多核处理一章。

J 显示线程的状态; 请参阅系统架构指南的 QNX Neutrino 微内核章节中的“Thread life cycle”。

j (QNX Neutrino 6.6 或更高版本)显示一个十六进制数,其位指示哪些信号被阻止。

K 显示执行的最后一个内核调用。

k 显示进程abilities。

L 显示会话 ID。

l (“el”) 显示线程运行的最后一个 CPU。

M 显示PID拥有的内存。

m 显示线程的堆栈大小。 输出包括当前映射的堆栈数量和括号中的线程允许的最大值。 有关详细信息,请参阅 QNX Neutrino 程序员指南的进程一章中的“Stack allocation”。

N 显示进程的简称。

n 显示进程的长名称。

O (QNX Neutrino 6.6 或更高版本)显示加载的共享库。

o (QNX Neutrino 核心操作系统 6.3.2 或更高版本)显示与进程关联的连接 ID 和文件描述符。 如果您无权访问它们,pidin 仅提供有限的信息。每个连接和文件描述符的信息包括以下内容:

文件描述符,如果是侧通道则后跟 s
连接到的进程的 ID
打开标志(r 或 -,后跟 w 或 -),或挂载点的 MP
偏移量
文件或设备的名称(如果可用)。
-n 选项与 o 格式不兼容; 使用 on -f remote_node pidin -F "%o" 代替。

P (大写“P”)显示进程组。

p (小写“p”)显示线程优先级。 调度优先级数字后面的字母代表使用的调度策略,如下:######
f — FIFO
r — round-robin
o — other(目前与round-robin相同)
s — 零星(sporadic)调度
有关这些调度策略的更多信息,请参阅系统架构指南中的“Thread scheduling”。

Q 显示中断处理程序。 对于每个处理程序,pidin 显示:
(1) InterruptAttach()、InterruptAttachArray() 或 InterruptAttachEvent() 返回的中断 ID
(2) 传递给 InterruptAttach() 或 InterruptAttachEvent() 的中断向量
(3) 掩码级别计数
(4) 中断标志,作为字母(如果设置)或连字符(如果未设置):
T — _NTO_INTR_FLAGS_TRK_MSK
P — _NTO_INTR_FLAGS_PROCESS
E — _NTO_INTR_FLAGS_END
N — _NTO_INTR_FLAGS_NO_UNMASK
A — _NTO_INTR_FLAGS_ARRAY(在内部用于指示中断处理程序是使用 InterruptAttachArray() 附加的)
(5) 中断处理程序的地址和中断处理程序区,用冒号隔开
(6) 对要交付的 sigevent 的描述。 有效的描述包括:
信号标志
SIGNAL_CODE 签名代码:值
SIGNAL_THREAD 信号代码:值
PULSE 代码:优先级代码:值
解锁
INTR
线程代码:值

q (QNX Neutrino 6.4.0 或更高版本)显示调用例程地址的回溯。 为获得最佳结果,请将此格式与 I 格式一起使用(如回溯简写形式)。

R 显示有关定时器的信息:
(1) TimerCreate() 返回的定时器 ID
(2) 与此计时器关联的线程 ID(整个进程为 0)
(3) 超限次数
(4) 使用的时钟类型:
REAL — CLOCK_REALTIME
SOFT — CLOCK_SOFTTIME
MONO — CLOCK_MONOTONIC

计时器标志:
X — _NTO_TI_EXPIRED
A — _NTO_TI_ABSOLUTE
a - _NTO_TI_ACTIVE
P — _NTO_TI_PRECISE

到期前剩余的时间,以微秒为单位,后跟斜杠 (/),然后是计时器间隔,以微秒为单位
计时器容差,以微秒为单位,或 INF 无限容忍计时器
定时器超时时要传递的 sigevent 的描述:
SIGNAL signo
SIGNAL_CODE signo code:value
SIGNAL_THREAD signo code:value
PULSE coid:priority code:value
UNBLOCK
INTR
THREAD code:value


[ 对于每个通道,显示通道 ID、标志、脉冲长度、发送、接收和回复队列,以及(在 QNX Neutrino 7.1 或更高版本中)安全类型(请参阅系统安全指南中的“Using security policies”) .

------------------------------------------------------------------
Flag                       Value                Meaning
------------------------------------------------------------------
_NTO_CHF_FIXED_PRIORITY    0x0001u              接收消息时抑制优先级继承
_NTO_CHF_UNBLOCK           0x0002u              当在通道上被 REPLY 阻塞的线程在其消息被回复之前尝试解除阻塞时传递一个脉冲
_NTO_CHF_THREAD_DEATH      0x0004u              在拥有通道的进程中的任何线程死亡时发送一个脉冲
_NTO_CHF_DISCONNECT        0x0008u              当一个进程的所有连接都断开时发送一个脉冲
_NTO_CHF_NET_MSG           0x0010u              为 io_pkt* 资源管理器保留
_NTO_CHF_COID_DISCONNECT   0x0040u              当连接所依附的通道被销毁时,为属于调用进程的每个连接向该通道发送一个脉冲
_NTO_CHF_PULSE_POOL        0x0100u              通道是使用 ChannelCreatePulsePool() 创建的,脉冲在专用脉冲池中排队。
_NTO_CHF_PRIVATE           0x1000u              通道是私有的
_NTO_CHF_MSG_PAUSING       0x2000u              内核可以暂停消息,否则会导致死锁
_NTO_CHF_INHERIT_RUNMASK   0x4000u              当线程在通道上接收消息时,线程继承发送者的运行掩码;当一个线程在通道上接收到一个脉冲时,该线程恢复到它的默认运行掩码。 
                                                如果接收线程正在运行掩码排除的处理器上运行,则线程被重新调度。
------------------------------------------------------------------

有关详细信息,请参阅 C 库参考中的 ChannelCreate()。

\ (QNX Neutrino 6.6 或更高版本)显示进程的补充组 ID。

] (QNX Neutrino 6.6 或更高版本)显示进程的应用程序 ID。

^ (QNX Neutrino 6.6 或更高版本)以纳秒为单位显示进程的默认计时器容差,如果计时器具有无限容差,则为无限。
_
(下划线;QNX Neutrino 7.0 或更高版本)显示进程的安全类型。 有关详细信息,请参阅系统安全指南中的“Using security policies”。

# (井号;QNX Neutrino 7.1 或更高版本)显示进程的硬资源和软资源限制。

$ 显示 CPU 排名名称。


五、Memory format characters

您可以使用 -M 选项指定的内存格式字符包括:

< 显示内存对象的代码大小。

= 显示内存对象的数据大小。

> 显示内存对象的地址。

? 显示内存对象的偏移量。

M 显示进程拥有的内存。

: 显示内存对象的名称,或映射物理内存的映射物理内存。

; 显示映射物理内存时在 mmap() 调用中使用的偏移量。

@ 显示内存对象的标志,包括:
E — MAP_ELF
F — MAP_FIXED
P — MAP_PRIVATE
S — MAP_SHARED

有关这些标志的更多信息,请参阅 QNX Neutrino 库参考中的 mmap() 条目。


六、Shorthand forms

每个速记形式代表格式代码或特殊命令的特定组合。 您只需键入唯一标识名称所需的字符数。 速记形式包括以下内容:

1. abilities

(equivalent to -F "%a %N %k")

(QNX Neutrino 7.1 或更高版本)显示每个被显示进程的能力。

能力名称后面的信息有两部分:其属性的四字符描述(加上可选的前缀),以及配置的任何子范围的列表。 属性描述使用以下值:

R 当进程的有效用户 ID 为 0 时,进程才有能力。

N 当进程有一个非 0 的有效用户 ID 时,它有能力。

L 能力被锁定。

I 能力由 spawn 或 exec 继承。

D 表示一种自定义能力,其默认设置决定是否给予该能力或不给予该能力是未知的。 在调用 procmg_ability_create() 指定后,进程将使用默认值。 例如,DD-- 表示当进程的有效用户 ID 为 0 或非 0 值时将使用默认值。

*(星号) 能力将始终被拒绝,因为它尚未通过调用 procmgr_ability_create() 创建,即使它具有 R 或 N。

范围列表使用以下值:

R 当进程的有效用户 ID 为 0 时,进程被赋予指定范围的能力。
N 当进程的有效用户 ID 不是 0 时,进程被赋予指定范围的能力。
(range) 指定单个值或范围的开始值和结束值。

例如,在以下输出摘录中,spawn_setuid 是:
当进程的有效用户 ID 为 0 时提供给进程
当进程的有效用户 ID 不是 0 时,不提供给该进程
locked
不被 spawn 或 exec 继承
不限于一个子范围

# pidin -p slogger2 abilities
     pid name               
    4099 proc/boot/slogger2 
              spawn_setuid  R-L-
              spawn_setgid  R-L-
                     ...

在以下示例输出中,setuid 能力为:
当进程的有效用户 ID 为 0 时提供给进程
当进程具有非 0 的有效用户 ID 时赋予该进程
锁定
不被 spawn 或 exec 继承
当进程的有效用户 ID 为 0 或任何其他值时,允许子范围 0 和 21(每个范围包含一个值)

setuid RNL- RN(0), RN(21)

在以下示例输出中,smmu/attach 是:
总是被拒绝(由 * 表示),因为它尚未通过调用 procmgr_ability_create() 创建,并且 R 和 N 指定的属性将被忽略; 调用 procmgr_ability_create()后,如果进程的有效用户ID为0,则赋予该进程能力,如果有效用户ID值不为0,
则是否赋予该能力由默认决定,由调用指定
锁定
不被 spawn 或 exec 继承

smmu/attach *RD--

输出以 eol 结尾,列表末尾项指示任何未来自定义能力的属性。 例如:

eol D-L-


2. arguments

(equivalent to -F "%a %A")

显示所显示进程的参数。

3. backtrace

(equivalent to -F "%I %q")

(QNX Neutrino 6.4.0 或更高版本)显示所显示进程中每个线程的回溯信息。 例如:

$ pidin -p devc-con-hid back
pid-tid     backtrace
    4103-01 b033ab5b:b03323cb:b03324f3:804f6ed:804c120:804a285
    4103-02 b033af63:805ca60:b031f0ad

输出包括与线程 ID 连字符的进程 ID,后跟调用例程地址的回溯。

4. channels

(equivalent to -F "%a %b %N %[")

(QNX Neutrino 6.4.0 或更高版本)对于每个通道,显示通道 ID、标志、脉冲长度、发送、接收和回复队列,以及(在 QNX Neutrino 7.1 或更高版本中)安全类型(参见“Using security policies” in the System Security Guide”)。
如果您试图跟踪脉冲泄漏(即未接收脉冲的进程),则此简写很有用。 这会导致内核内存使用量增加,因为脉冲结构是在内核中分配的。

5. environment

(equivalent to -F "%a %N %E")

显示所显示进程的环境。

6. extsched

(QNX Neutrino 核心操作系统 6.3.2 或更高版本)显示活动扩展调度程序配置的详细信息。
对于自适应分区调度程序,这是一行全局配置,然后是每个定义分区的一行(显示名称、预算、关键预算和过载通知)。 有关详细信息,请参阅 Adaptive Partitioning User's Guide。

仅本地节点支持 extsched 速记。 要从远程节点获取此信息,请使用:

on -f remote_node pidin extsched

7. family

(equivalent to -F "%a %N %L %P %e %G %C")

显示所显示进程的会话、进程组、父进程、兄弟进程和子进程。

8. fds

(equivalent to -F "%a %N %o")

(QNX Neutrino 核心操作系统 6.3.2 或更高版本)显示有关进程连接和文件描述符的信息。
-n 选项与 fds 速记不兼容; 使用 on -f remote_node pidin fds 代替。

9. flags

(equivalent to -F "%a %N %f")

以十六进制显示进程的标志。

10. info

显示有关系统的信息,例如处理器类型(可以看大小核)和可用内存量。 例如:

# pidin info
CPU:AARCH64 Release:7.1.0  FreeMem:206MB/15GB BootTime:Jan 01 08:00:01 CST 1970
 Actual resident free memory:206Mb
Processes: 112, Threads: 1090
Processor1: 1091556528 Octa Kryo-695 Gold 2092MHz FPU
Processor2: 1091556528 Octa Kryo-695 Gold 2092MHz FPU
Processor3: 1091556528 Octa Kryo-695 Gold 2092MHz FPU
Processor4: 1091556528 Octa Kryo-695 Gold 2092MHz FPU
Processor5: 1091556544 Octa Kryo-695 Gold Plus 2380MHz FPU
Processor6: 1091556544 Octa Kryo-695 Gold Plus 2380MHz FPU
Processor7: 1091556544 Octa Kryo-695 Gold Plus 2380MHz FPU
Processor8: 1091556544 Octa Kryo-695 Gold Plus 2380MHz FPU

FreeMem 是有多少内存可用;如果内存已保留但尚未分配,则实际常驻空闲内存可能会更高。 例如,当您创建一个新进程时,会为主线程的堆栈保留一定数量的内存,但不会立即分配物理页面。

11. irqs

(equivalent to -F "%a %b %N %Q")

显示进程拥有的 IRQ 处理程序。

# pidin -F "%a %b %N %Q" //或 pidin irqs
901212   1 bin/xpower_manager
                176          0x340    0 T---- @0x5df80901bc:0x5df80a8270
                ...


12. libs

(equivalent to -F "%a %N %O")

(QNX Neutrino 6.6 或更高版本)显示进程加载的共享库。

# pidin -p 2138221 libs
     pid name
 2138221 bin/gsl_hab_server
                   Address                      DT_SONAME Path
        0x000000592fb3f000                            PIE /ifs/bin/gsl_hab_server
        0x00000040401ad000                  libGSLUser.so /ifs/lib64/libGSLUser.so
        0x00000040401db000             libuhab-qvmhost.so /ifs/lib64/libuhab-qvmhost.so
        0x00000040401f0000                 libsecpol.so.1 /ifs/lib64/libsecpol.so.1
        ...
        0x00000040403b9000                      libvmm.so /ifs/lib64/libvmm.so


13. mapinfo

(equivalent to -F "%a %b %N %p %J %c %d %m" -M " %: @%> %; %< %= %@")

(QNX Neutrino 6.4.0 或更高版本)显示有关内存映射的信息。输出如下所示:

4101   8 proc/boot/io-usb-otg 10o RECEIVE           80K  424K   4096(20K)
         libc.so.5          @b0300000             452K   16K
         devu-hcd-uhci.so   @b8200000              24K  4096
         devu-hcd-ohci.so   @b8207000              24K  4096
         devu-hcd-ehci.so   @b820e000              28K  4096
         Mapped Phys Memory @40100000 (ee000000)         12K  S

这包括:

内存对象的名称,或映射物理内存的 Mapped Phys Memory
内存对象的地址,如果适用则后跟偏移量
对象的代码和数据大小
内存对象的标志


14. memory

(equivalent to -F "%a %b %N %p %J %c %d %m" -M " %M @%> %? %< %=")

显示显示进程使用的内存; pidin 显示共享内存区域,包括共享对象,以及每个线程的堆栈使用情况。 从进程的大小中删除共享代码和数据区域。
堆栈号表示当前映射的堆栈量,括号中表示该线程允许的最大值。 如果线程创建者负责回收用于堆栈的内存,则会打印星号 (*)。
如果您创建一个线程(例如,pthread_create()),并让 QNX Neutrino 内核分配堆栈,则没有 *. QNX Neutrino 内核自动回收堆栈内存。
如果您创建一个线程并提供您自己的堆栈(例如,pthread_attr_setstack()),则有一个 *. 您需要回收堆栈内存。
对于主线程,QNX Neutrino 内核创建一个线程并为堆栈提供内存,因此会打印一个 *。 QNX Neutrino 内核回收堆栈内存。
/dev/mem 的条目表示映射到进程地址空间的共享内存。 例如:

/dev/mem @38100000 ( 0) 172K

如果不同进程的条目显示相同的对象(本例中为@38100000),则它们都引用相同的共享内存对象。 进程可以不同地映射共享内存; 括号中的数字是 mmap() 调用中使用的偏移量,最后一个数字是映射的大小。

如果包含文本重定位的共享对象被重新映射为私有,pidin mem 会在名称旁边显示一个感叹号 (!)。

15. net

显示有关 Qnet 网络上所有节点的系统信息。

16. pmem

(equivalent to -F "%a %b %N %p %J %c %d %m")

仅显示进程内存。例如:

# pidin -p 741458 pmem
     pid tid name               prio STATE        code  data        stack
  741458   1 ool_policy_manager  10r JOIN        2280K 2840K  512K(516K)*
  741458   2 ool_policy_manager  10r CONDVAR     2280K 2840K  256K(260K)
  741458   3 ool_policy_manager  10r RECEIVE     2280K 2840K  256K(260K)


17. rc

显示连接到您机器的所有远程节点的进程名称和参数。

18. regs

(equivalent to -F "%a %b %N %r")

显示寄存器的值。

19. rlimits

(equivalent to -F "%#")

(QNX Neutrino 7.1 或更高版本)显示硬资源和软资源限制。 例如:

$ pidin -p$$ rlim
Resource limits:                        soft : hard                 
CPU (seconds)                       infinity : infinity             
File size (blocks)                  infinity : infinity             
Core dump (blocks)                  infinity : infinity             
Data segment size (kB)              infinity : infinity             
Stack size (kB)                     infinity : infinity             
Locked memory (kB)                  infinity : infinity             
Virtual memory (kB)                 infinity : infinity             
Open file descriptors                   1000 : 1000                 
Processes                           infinity : infinity             
Threads                             infinity : infinity             
Memory usage (.1% RAM)              infinity : infinity             
Open connections                    infinity : infinity             
Registered events                        256 : 256                  
Timers created                      infinity : infinity


20. rmasks

(equivalent to -F "%a %b %N %i")

(QNX Neutrino Core OS 6.3.2 或更高版本)显示运行掩码和继承掩码。

21. sched

(equivalent to -F "%a %b %N %p %J %l %$ %H")

(QNX Neutrino 核心操作系统 6.3.2 或更高版本)显示每个线程的有用调度参数

# pidin sched
     pid tid name               prio cpu ExtSched             STATE
       1   1 /procnto-smp-instr   0f   0                      READY
       1   2 /procnto-smp-instr   0f   1                      RUNNING
       1   3 /procnto-smp-instr   0f   2                      READY
       ...


22. session

(equivalent to -F "%L %a %P %e %N")

按会话 ID 排序,然后是进程 ID。 默认情况下,pidin 按进程 ID 对输出进行排序。

# pidin session
    sid      pid    pgrp    ppid name
      1        1       1         /procnto-smp-instr
      1     8194    8194       1 ifs/bin/slogger2
      1     8195    8195       1 n/bmetrics_service
      1     8196    8196       1 fs/bin/devc-quipv3
      ...


23. signals

(equivalent to -F "%a %b %N %S %s %j")

显示所显示进程的信号状态。如下:

# pidin -p 741458 signals
     pid tid name               signals ignored  signals pending  signals blocked
  741458   1 ool_policy_manager 0000000006800000 0000000000000000 ff00000000000000
  741458   2 ool_policy_manager 0000000006800000 0000000000000000 ff00000000000000
  741458   3 ool_policy_manager 0000000006800000 0000000000000000 ff00000000000000


24. syspage[=section]

显示系统页面的内容。 您可以通过指定名称来指定要打印的部分(例如,命令 pidin syspage=asinfo 显示 asinfo 部分)。 默认是全部。
例如,如果要查看图像文件系统(IFS)在内存中占用了多少空间,请运行命令:pidin syspage=asinfo
并寻找带有 imagefs 的行。 请参阅下面“示例”部分中显示的输出。

该信息始终包括系统页面的标头,它由 size、total_size、type 和 num_cpu 成员组成。 您可以获得以下部分的附加信息:

asinfo
cacheattr
callout
cpuinfo
hwinfo
intrinfo
mdriver
qtime
smp
strings
system_private
typed_strings

如果该部分没有任何附加信息,或者您指定的部分不存在,pidin 仍然会显示系统页面的标题。 有关系统页面内容的更多信息,请参阅构建嵌入式系统的“System Page”一章。 另请参阅《QNX Neutrino 程序员指南》中
的“Working with Memory”一章。

25. threads

(equivalent to -F "%a %b %N %h %J %B")

显示进程 ID、线程 ID(在 QNX Neutrino 7.0 或更高版本中)、短进程名称、线程名称、线程状态以及线程被阻塞的原因。 如果线程没有名称,pidin 会再次显示线程 ID (tid)。

# pidin -p 741458 threads
     pid tid name               thread name          STATE       Blocked
  741458   1 ool_policy_manager main                 JOIN        2
  741458   2 ool_policy_manager policy mgr core      CONDVAR     (0x1ed6c0a028)
  741458   3 ool_policy_manager 3                    RECEIVE     2
  741458   4 ool_policy_manager 4                    RECEIVE     2


26. timers

(equivalent to -F "%a %b %N %R")

显示进程拥有的计时器。

# pidin -p 909404 timers
     pid tid name
  909404   1 bin/power_manager
             0    0    0 MONO ----  0/0 0 PULSE 0x40000003:-1 0x7:0
             1    0    0 MONO ----  0/0 0 PULSE 0x40000003:-1 0x8:0
             2    0    0 MONO ----  0/0 0 PULSE 0x40000003:-1 0xa:0
             3    0    0 MONO X---  0/0 0 PULSE 0x40000003:-1 0x9:0


27. times

(equivalent to -F "%a %N %L %t %u %v %w %x")

显示进程的时间。对于显示的每个进程,显示:

start——进程开始的时间和日期
utime——进程消耗的CPU秒数
stime——内核代表进程消耗的 CPU 秒数
cutime——进程的子进程消耗的 CPU 秒数
cstime——内核代表进程的子进程消耗的 CPU 秒数

只有在子进程终止后,子进程的时间才会添加到 cutime 和 cstime。

CPU使用率是通过采样计算的。 当定时器中断发生时,内核确定哪个进程正在运行,并将该时间添加到活动线程及其进程的总运行时间。 如果内核本身处于活动状态,它还会将时间添加到活动线程及其进程的系统时间 (stime) 中。 utime 是总运行时间减去系统时间。
因此,这些时间是近似的,并且可能不准确(例如,如果进程由定时器中断驱动)。要确定更准确的时间,请使用系统分析器。 有关详细信息,请参阅系统分析工具包用户指南或 IDE 用户指南的分析性能一章。

# pidin -p 909404 times
     pid name                   sid  start time   utime  stime cutime cstime
  909404 bin/power_manager       1 Jan 01  1970  0.102  0.000  0.000  0.000


28. tolerance

(equivalent to -F "%a %N %^")

(QNX Neutrino 6.6 或更高版本)显示进程的默认计时器容差。

# pidin tolerance
     pid name               default tolerance
       1 /procnto-smp-instr 0
    8194 ifs/bin/slogger2   0
    ......


29. ttimes

(equivalent to -F "%a %b %N %J %t %y %z")

显示线程时间。

# pidin -p 909404 ttimes
     pid tid name               STATE        start time  thread start sutime
  909404   1 bin/power_manager RECEIVE     Jan 01  1970 Jan 01  1970  0.025
  909404   2 bin/power_manager RECEIVE     Jan 01  1970 Jan 01  1970  0.001
  909404   3 bin/power_manager SIGWAITINFO Jan 01  1970 Jan 01  1970  0.077


30. users

(equivalent to -F "%a %N %U %V %W %X %Y %Z %\\")

显示启动进程的用户的真实、有效、保存的用户ID和组ID,以及补充的组ID。此选项不显示用户或组的名称,仅显示数字 ID。

# pidin users
     pid name                      uid        gid       euid       egid       suid       sgid grouplist
       1 /procnto-smp-instr          0          0          0          0          0          0
   12309 s/bin/diag_service          0          0          0          0          0          0
   12310 ifs/bin/pipe              120        120        120        120        120        120
   45084 ifs/bin/mq                110        110        110        110        110        110
   ...

 

例子:
pidin 命令打印类似于以下内容的清单:

     pid tid name               prio STATE       Blocked
       1   1 /sys/procnto-instr   0f READY
       1   3 /sys/procnto-instr  10r RUNNING
       1   4 /sys/procnto-instr  12r RECEIVE     1
       1   5 /sys/procnto-instr  12r RECEIVE     1
       1   6 /sys/procnto-instr  12r RECEIVE     1
       1  11 /sys/procnto-instr  12r RECEIVE     1
       1  12 /sys/procnto-instr  10r RECEIVE     1
       1  13 /sys/procnto-instr  10r RECEIVE     1
       1  15 /sys/procnto-instr 255r RECEIVE     1
       1  16 /sys/procnto-instr  10r RECEIVE     1
       1  17 /sys/procnto-instr  10r RECEIVE     1
       2   1 sbin/tinit          10o REPLY       1
       3   1 proc/boot/slogger2  10o RECEIVE     1
       5   1 proc/boot/pci-serv  10o RECEIVE     1
       6   1 roc/boot/devb-eide  10o SIGWAITINFO
       6   2 roc/boot/devb-eide  21r RECEIVE     1
       ......

如果你的系统上有一个僵尸进程,运行不带参数的 pidin,使用 -fN(或等效的 -F“%N”),或者使用标志简写将打印 (Zombie) 代替进程的名称(没有其他细节) 除了 PID),如下所示:

...
  376856   1 bin/bash            10r REPLY       1
 1830937   1 ./ps_zombie         10r REPLY       1
 1835034     (Zombie)
 1847323   1 bin/sh              10r SIGSUSPEND
...

使用简写参数会导致 pidin 仅显示僵尸进程的 PID,而不显示 (Zombie) 文本或任何其他详细信息。

使用 pidin -F "%I %60N" 显示 PID 和 TID,以及最多 60 个字符的进程短名称:

pid-tid     name
       1-01 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-03 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-04 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-05 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-06 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-11 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-12 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-13 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-15 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-16 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       1-17 rldbuild/cdr/qnx6/tmp/target/qnx6/x86_64/boot/sys/procnto-instr
       2-01 sbin/tinit
       3-01 proc/boot/slogger2
       5-01 proc/boot/pci-server
       6-01 proc/boot/devb-eide
       ...

pidin mem 命令显示:

     pid tid name               prio STATE            code  data        stack
       1   1 /procnto-smp-instr   0f RUNNING             0     0    480(480) 
       1   2 /procnto-smp-instr   0f READY               0     0    480(480) 
       1   4 /procnto-smp-instr   1r RECEIVE             0     0  256K(256K) 
       1   5 /procnto-smp-instr  10r CONDVAR             0     0  8192(8192) 
       1   6 /procnto-smp-instr  10r CONDVAR             0     0  8192(8192) 
       1   7 /procnto-smp-instr 255r RECEIVE             0     0  8192(8192) 
       1   8 /procnto-smp-instr 255r RECEIVE             0     0  8192(8192) 
       1   9 /procnto-smp-instr 255r RECEIVE             0     0  8192(8192) 
       1  10 /procnto-smp-instr 255r RECEIVE             0     0  8192(8192) 
       1  11 /procnto-smp-instr  21r RECEIVE             0     0  8192(8192) 
       1  12 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
       1  13 /procnto-smp-instr  10r RUNNING             0     0  8192(8192) 
       1  14 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
       1  15 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
       1  16 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
       1  18 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
       1  19 /procnto-smp-instr  10r RECEIVE             0     0  8192(8192) 
            procnto-smp-instr  @ffff80000002a000             762K  125K
       2   1 proc/boot/slogger2  10r RECEIVE             0  684K   12K(516K)*
            slogger2           @         8048000              64K  8192
            libc.so.5          @       100000000             692K   24K
            libslog2.so.1      @       1002b5000              32K  4096
            slogger2/console.2 @       180000000 (       0)         20K
            /slogger2/random.5 @       180005000 (       0)         20K
            ogger2/devb_eide.7 @       18000a000 (       0)         20K
            2/io_usb_otg.49165 @       18000f000 (       0)         20K
            r2/io_audio.159763 @       180014000 (       0)         20K

pidin syspage=asinfo 命令显示:

Section:asinfo offset:0x00000568 size:0x00000240
    0)                0-ffff             o:ffff a:0000 p:100 n:io
   20)                0-ffffffff         o:ffff a:0010 p:100 n:memory
   40)                0-ffffff           o:0020 a:0010 p:100 n:memory/isa
   a0)                0-9fbff            o:0040 a:0017 p:100 n:memory/isa/ram
  180)             1000-cfff             o:00a0 a:0007 p:100 n:memory/isa/ram/sysram
  1a0)            20f98-9fbff            o:00a0 a:0007 p:100 n:memory/isa/ram/sysram
   c0)           100000-ffffff           o:0040 a:0037 p:100 n:memory/isa/ram
  1c0)           100000-40e507           o:00c0 a:0007 p:100 n:memory/isa/ram/sysram
  1e0)           5e533c-ffffff           o:00c0 a:0027 p:100 n:memory/isa/ram/sysram
   60)          6000000-ffefffff         o:0020 a:0013 p:100 n:memory/device
  100)          6000000-ffeafff          o:0060 a:0017 p:100 n:memory/device/ram
  220)          6000000-ffeafff          o:0100 a:0007 p:100 n:memory/device/ram/sysram
   80)         fff00000-ffffffff         o:0020 a:0005 p:100 n:memory/rom
   e0)          1000000-5ffffff          o:0020 a:0037 p:100 n:memory/ram
  200)          1000000-5ffffff          o:00e0 a:0027 p:100 n:memory/ram/sysram
  120)           40e508-5e533b           o:0020 a:0005 p:100 n:memory/imagefs
  140)           400400-40e507           o:0020 a:0007 p:100 n:memory/startup
  160)           40e508-5e533b           o:0020 a:0007 p:100 n:memory/bootram