Display information about the processes in the system (QNX Neutrino)
pidin [-hklv] [-d delay] [-F formats] [-f formats] [-M formats] [-n node] [-o prio] [-P pid] [-p pid] [shorthand ...]
QNX Neutrino
If you don't specify any format codes, the default is "%a %b %N %p %J %B".
on -f remote_node pidin fds
You need to type only as many characters of the name as are required to uniquely identify it. For more information, see Shorthand forms, below.
The pidin utility displays information about the processes running on a QNX Neutrino system. The amount of information it displays depends on which abilities are enabled (see procmgr_ability() in the C Library Reference):
By default, pidin displays the statistics once and then exits. If you specify the -l option, pidin loops forever, displaying statistics after the delay specified by the -d option.
If you specify the -l and -k options, pidin loops until a error occurs, displaying statistics after the given delay. The most common error encountered is a race condition: procnto indicates that a process exists, but the process is gone when pidin queries it.
Unlike ps, pidin lists zombie processes (see the examples below).
State | Value |
---|---|
CONDVAR | Address of the condvar |
JOIN | Thread ID of the blocking thread |
MUTEX | The address of the mutex, or the IDs of the process and thread blocked on, followed by the number of times locked, in the form pid-tid #times |
RECEIVE | ID of the channel within the process that the thread is blocked on |
REPLY | Process IDa,b |
SEM | Address of the semaphore |
SEND | Process IDa,b |
STACK | Stack size |
WAITPAGE | Virtual address of the page |
WAITTHREAD | Thread ID of the blocking thread |
a If the process is running on a remote node, the process ID is followed by @ and the node name.
b If you specify the -v option, the value also includes the process name, coid, scoid, and channel.
Flag | Value | Meaning |
---|---|---|
_DEBUG_FLAG_STOPPED | 0x00000001 | The thread isn't running |
_DEBUG_FLAG_ISTOP | 0x00000002 | The thread is stopped at a point of interest |
_DEBUG_FLAG_IPINVAL | 0x00000010 | The instruction pointer isn't valid |
_DEBUG_FLAG_ISSYS | 0x00000020 | System process |
_DEBUG_FLAG_SSTEP | 0x00000040 | Stopped because of single-stepping |
_DEBUG_FLAG_CURTID | 0x00000080 | The thread is the current thread |
_DEBUG_FLAG_TRACE_EXEC | 0x00000100 | Stopped because of a breakpoint |
_DEBUG_FLAG_TRACE_RD | 0x00000200 | Stopped because of read access |
_DEBUG_FLAG_TRACE_WR | 0x00000400 | Stopped because of write access |
_DEBUG_FLAG_TRACE_MODIFY | 0x00000800 | Stopped because of modified memory |
_DEBUG_FLAG_RLC | 0x00010000 | The Run-on-Last-Close flag is set |
_DEBUG_FLAG_KLC | 0x00020000 | The Kill-on-Last-Close flag is set |
_DEBUG_FLAG_FORK | 0x00040000 | The child inherits flags (stop on fork or spawn) |
_DEBUG_FLAG_EXEC | 0x00080000 | (QNX Neutrino 6.6 or later) Stop on exec |
_DEBUG_FLAG_THREAD_EV | 0x00100000 | (QNX Neutrino 6.6 or later) Stop when creating or destroying a thread |
_DEBUG_FLAG_64BIT | 0x00200000 | (QNX Neutrino 7.0 or later) The thread is running in a 64-bit architecture |
Flag | Value | Meaning |
---|---|---|
_NTO_TF_INTR_PENDING | 0x00010000 | The thread has a pending interrupt |
_NTO_TF_DETACHED | 0x00020000 | The thread is detached |
_NTO_TF_SHR_MUTEX | 0x00040000 | (QNX Neutrino 7.0 or later) This thread places no restrictions on which threads it will share mutexes with (see below) |
_NTO_TF_SHR_MUTEX_EUID | 0x00080000 | (QNX Neutrino 7.0 or later) This thread shares mutexes only with threads that have the same effective user ID as it does (see below) |
_NTO_TF_THREADS_HOLD | 0x00100000 | Threads are being held |
_NTO_TF_UNBLOCK_REQ | 0x00400000 | There's an unblock pending on the thread |
_NTO_TF_ALIGN_FAULT | 0x01000000 | An alignment fault has occurred |
_NTO_TF_SSTEP | 0x02000000 | Single-stepping is turned on |
_NTO_TF_ALLOCED_STACK | 0x04000000 | A stack has been allocated for the thread |
_NTO_TF_NOMULTISIG | 0x08000000 | Signals don't terminate all threads in the process |
_NTO_TF_LOW_LATENCY | 0x100000000 | (QNX Neutrino 7.0 or later) The thread should be scheduled to run on the same CPU as the one the kernel is currently running on. For more information, see _NTO_TCTL_LOW_LATENCY in the entry for ThreadCtl() in the C Library Reference. |
_NTO_TF_IOPRIV | 0x80000000 | The thread has I/O privileges |
If neither _NTO_TF_SHR_MUTEX nor _NTO_TF_SHR_MUTEX_EUID is set, the thread doesn't share mutexes with any threads outside its process.
Flag | Value | Meaning |
---|---|---|
_NTO_PF_NOCLDSTOP | 0x00000001 | The process isn't sent a SIGCHILD signal when its children stop |
_NTO_PF_LOADING | 0x00000002 | The process hasn't been fully loaded |
_NTO_PF_TERMING | 0x00000004 | The process is terminating |
_NTO_PF_ZOMBIE | 0x00000008 | The process is a zombie |
_NTO_PF_NOZOMBIE | 0x00000010 | The process won't become a zombie on its death |
_NTO_PF_FORKED | 0x00000020 | The process is a child by way of exec() |
_NTO_PF_ORPHAN_PGRP | 0x00000040 | The process is an orphan |
_NTO_PF_STOPPED | 0x00000080 | The process has been stopped |
_NTO_PF_DEBUG_STOPPED | 0x00000100 | The process has been stopped by the debugger |
_NTO_PF_BKGND_PGRP | 0x00000200 | The process is running in the background |
_NTO_PF_NO_LIMITS | 0x00000400 | The process has no limits on its resources |
_NTO_PF_CONTINUED | 0x00000800 | The process was stopped, but has now been made to continue |
_NTO_PF_CHECK_INTR | 0x00001000 | The process is attached to some interrupts |
_NTO_PF_COREDUMP | 0x00002000 | The process has written a coredump file |
_NTO_PF_PTRACED | 0x00004000 | The process is being traced |
_NTO_PF_RING0 | 0x00008000 | The process is running in a privileged supervisor state (known as ring 0 in some architectures) |
_NTO_PF_SLEADER | 0x00010000 | The process is a session leader |
_NTO_PF_WAITINFO | 0x00020000 | The process will produce wait information when it terminates |
_NTO_PF_VFORKED | 0x00040000 | The process was created with vfork() |
_NTO_PF_DESTROYALL | 0x00080000 | The process is being destroyed |
_NTO_PF_NOCOREDUMP | 0x00100000 | The process is not permitted to create core files |
_NTO_PF_NOCTTY | 0x00200000 | The process doesn't have a controlling TTY |
_NTO_PF_WAITDONE | 0x00400000 | The process's termination status has already been retrieved, so another wait won't succeed |
_NTO_PF_TERM_WAITING | 0x00800000 | The process is waiting to terminate |
_NTO_PF_ASLR | 0x01000000 | (QNX Neutrino 6.6 or later) The process is using address space layout randomization (ASLR) |
_NTO_PF_EXECED | 0x02000000 | (QNX Neutrino 6.6 or later) The process was created by a fork(), spawn*(), or exec*() |
_NTO_PF_APP_STOPPED | 0x04000000 | (QNX Neutrino 7.0 or later) The process has been stopped |
_NTO_PF_64BIT | 0x08000000 | (QNX Neutrino 7.0 or later) The code that the process is running was compiled for a 64-bit architecture |
_NTO_PF_NET | 0x10000000 | (QNX Neutrino 7.0.1 or later) Used by Qnet |
_NTO_PF_NOLAZYSTACK | 0x20000000 | (QNX Neutrino 7.0.4 or later) Memory for the stack was reserved when the thread was allocated |
_NTO_PF_THREADWATCH | 0x80000000 | Not currently used |
For adaptive partitioning scheduling, the information is the name of the partition that the thread is running in. For more information, see the Adaptive Partitioning User's Guide.
The information for each connection and file descriptor includes the following:
For more information on these scheduling policies, see Thread scheduling in the System Architecture guide.
Flag | Value | Meaning |
---|---|---|
_NTO_CHF_FIXED_PRIORITY | 0x0001u | Suppress priority inheritance when receiving messages |
_NTO_CHF_UNBLOCK | 0x0002u | Deliver a pulse when a thread that's REPLY-blocked on a channel attempts to unblock before its message is replied to |
_NTO_CHF_THREAD_DEATH | 0x0004u | Deliver a pulse on the death of any thread in the process that owns the channel |
_NTO_CHF_DISCONNECT | 0x0008u | Deliver a pulse when all connections from a process are detached |
_NTO_CHF_NET_MSG | 0x0010u | Reserved for the io_pkt* resource manager |
_NTO_CHF_COID_DISCONNECT | 0x0040u | Deliver a pulse to this channel for each connection that belongs to the calling process when the channel that the connection is attached to is destroyed |
_NTO_CHF_PRIVATE | 0x1000u | The channel is private |
_NTO_CHF_MSG_PAUSING | 0x2000u | The kernel can pause a message that would otherwise cause a deadlock |
_NTO_CHF_INHERIT_RUNMASK | 0x4000u | When a thread receives a message on the channel, the thread inherits the sender's runmask; when a thread receives a pulse on the channel, the thread reverts to its default runmask. If the receiving thread is running on a processor that the runmask excludes, the thread is rescheduled. |
For more information, see ChannelCreate() in the C Library Reference.
For more information about these flags, see the entry for mmap() in the QNX Neutrino Library Reference.
$ pidin -p devc-con-hid back pid-tid backtrace 4103-01 b033ab5b:b03323cb:b03324f3:804f6ed:804c120:804a285 4103-02 b033af63:805ca60:b031f0ad
The output includes the process ID hyphenated to the thread ID, followed by a backtrace of the addresses of the calling routines.
This shorthand is useful if you're trying to track pulse leaks—that is, a process not receiving pulses. This can cause a growth in kernel memory usage, since pulse structures are allocated in the kernel.
For the adaptive partitioning scheduler, this is one line of global configuration and then one line for each defined partition (showing the name, budget, critical budget, and overload notifications). For more information, see the Adaptive Partitioning User's Guide.
on -f remote_node pidin extsched
CPU:X86_64 Release:7.0.0 FreeMem:909MB/1023MB BootTime:Apr 16 15:56:36 GMT 2018 Actual resident free memory:910Mb Processes: 19, Threads: 80 Processor1: 328366 Core i7/5/3 Stepping 3 2665MHz FPU Processor2: 328366 Core i7/5/3 Stepping 3 2709MHz FPU
FreeMem is how much memory is available; the actual resident free memory can be higher than that if memory is reserved but hasn't yet been allocated. For example, when you're creating a new process, a certain amount of memory is reserved for the main thread's stack but the physical pages aren't allocated right away.
The output looks like this:
4101 8 proc/boot/io-usb-otg 10o RECEIVE 80K 424K 4096(20K) libc.so.4 @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
It includes:
The stack numbers represent the amount of stack currently mapped and, in parentheses, the maximum allowed for that thread. An asterisk (*) next to a stack size indicates that memory used in the stack isn't automatically returned to the system heap when the thread exits.
Entries for /dev/mem indicate shared memory that's mapped into the process address space. For example:
/dev/mem @38100000 ( 0) 172K
If the entries for different processes show the same object (@38100000 in this example), they all reference the same shared memory object. The processes can map that shared memory differently; the number in parentheses is the offset that was used in the mmap() call, and the last number is the size of the mapping.
If a shared object that contains text relocations is remapped as private, pidin mem displays an exclamation mark (!) beside the name.
For example, if you want to find out how much space the image file system (IFS) occupies in the memory, run the following command:
pidin syspage=asinfo
and look for the lines with imagefs. See the output in the display as shown in the Examples section below.
The information always includes the system page's header, which consists of the size, total_size, type, and num_cpu members. You can get additional information for the following sections:
If the section doesn't have any additional information, or the section you specify doesn't exist, pidin displays the system page's header anyway. For more information about the contents of the system page, see the System Page chapter of Building Embedded Systems.
For each process displayed, show:
The times for the child processes are added to cutime and cstime only after the children terminate.
As a result, these times are approximate, and can be inaccurate (e.g., if a process is driven by the timer interrupt). To determine more accurate times, use the system profiler. For more information, see the System Analysis Toolkit User's Guide.
This option doesn't display the users' or groups' names, just the numerical IDs.
The pidin command prints a listing similar to this:
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 ...
... 376856 1 bin/bash 10r REPLY 1 1830937 1 ./ps_zombie 10r REPLY 1 1835034 (Zombie) 1847323 1 bin/sh 10r SIGSUSPEND ...
Using pidin -F "%I %60N" displays the PID and TID, along with up to 60 characters of the processes' short name:
pid-tid name 1-01 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-03 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-04 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-05 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-06 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-11 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-12 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-13 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-15 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-16 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/boot/sys/procnto-instr 1-17 rldbuild/cdr/qnx6/tmp/target/qnx6/x86/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 ...
The pidin mem command displays:
pid tid name prio STATE code data stack 1 1 /sys/procnto-instr 0f READY 1812K 12K 0(320)* 1 3 /sys/procnto-instr 10r RUNNING 1812K 12K 0(8192) 1 4 /sys/procnto-instr 12r RECEIVE 1812K 12K 0(8192) 1 5 /sys/procnto-instr 12r RECEIVE 1812K 12K 0(8192) 1 6 /sys/procnto-instr 12r RECEIVE 1812K 12K 0(8192) 1 11 /sys/procnto-instr 12r RECEIVE 1812K 12K 0(8192) 1 12 /sys/procnto-instr 10r RECEIVE 1812K 12K 0(8192) 1 13 /sys/procnto-instr 10r RECEIVE 1812K 12K 0(8192) 1 15 /sys/procnto-instr 255r RECEIVE 1812K 12K 0(8192) 1 16 /sys/procnto-instr 10r RECEIVE 1812K 12K 0(8192) 1 17 /sys/procnto-instr 10r RECEIVE 1812K 12K 0(8192) procnto-instr @cfbe5000 12K 12K 2 1 sbin/tinit 10o REPLY 8192 36K 4096(516K)* ldqnx.so.2 @b0300000 344K 16K 3 1 proc/boot/slogger2 10o RECEIVE 8192 104K 4096(516K)* ldqnx.so.2 @b0300000 344K 16K 5 1 proc/boot/pci-serv 10o RECEIVE 36K 40K 8192(516K)* ldqnx.so.2 @b0300000 344K 16K 6 1 roc/boot/devb-eide 10o SIGWAITINFO 52K 91M 8192(516K)* 6 2 roc/boot/devb-eide 21r RECEIVE 52K 91M 4096(12K) ...
The pidin syspage=asinfo command displays:
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