Implemented by the Process Manager component of procnto, the /proc virtual filesystem lets you access and
control every process and thread running within the system.
The /proc filesystem manifests each process
currently running on the system as a directory whose name is the
numerical process ID (in decimal) of the process.
Inside this directory, you'll find the following files:
- as
- The address space that contains the process's entire memory space.
- cmdline
- The arguments passed to the process, separated by null characters.
For example:
# pidin -p 28687 arg
pid Arguments
28687 io-pkt-v6-hc -d abc100 mac=96a414016206
# echo `cat /proc/28687/cmdline`
io-pkt-v6-hc-dabc100mac=96a414016206
- ctl
- A file that you can use for
devctl()
commands to access processes and their threads.
- exefile
- The path of the executable file used to run the process.
For example:
# echo `cat /proc/28687/exefile`
/sbin/io-pkt-v6-hc
- mappings
- A detailed view of every page in a process's address space.
- pmap
- A detailed view of the process's mappings.
- vmstat
- A view of the process's virtual memory.
You can use the following standard functions to access the files in the
/proc filesystem:
Function |
Purpose |
open() |
Establish a file descriptor to a process |
read() |
Read data from the process's address space |
write() |
Write data to the process's address space |
stat() |
Return
struct stat
information
|
lseek() |
Establish a position within the process's
address space for further operations |
devctl() |
Manipulate a process or thread |
close() |
Release a file descriptor |
Ancillary functions (such as
readdir(),
opendir(),
and so on) are supported on the
directory /proc itself—this aids in implementing commands such as
ls.
Note:
In QNX Neutrino 7.0 or later, you must
open the appropriate file (e.g., /proc/pid/ctl),
not the /proc/pid directory.
When you start
procnto,
you can use the following options to specify the
umask
to use for the /proc/pid/* files.
- -d
- Controls the umask for cmdline and cctl.
The default is 0022.
- -u
- Controls the umask for as, exefile, mappings,
pmap and vmstat.
The default is 0066.
You can use
chmod
to drop permissions on the as and ctl files, but you can't then regain
the permissions.
In order to read or write data from or to the process, you must have
opened the file descriptor in the appropriate mode.
You must also have appropriate privileges to open the particular process.
In QNX Neutrino 7.0.1 or later, access is controlled to a limited extent by POSIX permissions but mainly
by abilities (see
procmgr_ability()
in the C Library Reference):
- If your process has a different user ID than the target process, and you have only the POSIX permissions,
then you can:
- get limited access to cmdline; it shows the target process's first argument only
(i.e., it tells you what's running but none of its command-line arguments)
- get limited access to ctl; it supports the DCMD_PROC_INFO,
DCMD_PROC_MAPDEBUG_BASE, and DCMD_PROC_TIDSTATUS
devctl() commands, but the output is sanitized.
- read exefile
- If your process has the same user ID and has POSIX access, then you get unrestricted access to the files.
- Irrespective of the user ID and POSIX permissions:
- If your process has the PROCMGR_AID_XPROCESS_QUERY ability for the user IDs of the target file
(effective, real, and saved), you can get read access to all files except for the as file.
- If your process has PROCMGR_AID_XPROCESS_MEM_READ for the user IDs of the target file
(effective, real, and saved), you can get read access to the as file.
- If a process has PROCMGR_AID_XPROCESS_DEBUG for the user IDs of the target file
(effective, real, and saved), you can get write access to as and ctl.
- The root user (effective user ID 0), gets unrestricted POSIX access but still needs the
abilities.
Only one process can have a /proc/pid/as
or /proc/pid/ctl
file open for writing at a time.