注:翻译自: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