Caution: It is possible that a type other than short is used, but where the base type is short. The
additional
uint16_t, int_least16_t, uint_least16_t, ubit16, sbit16,cnt_t,nlink_t,use_t.
There might be others in headers included by the specific program’s source code.
Using
A program might have some short counter whose value is a function of the number of processes. An obvious example is a counter in a loop which calls pstat_getproc(2). Such programs fail if the number of processes exceeds the precision of such a counter.
Checking Against MAXPID, PID_MAX, or 30,000
The MAXPID and PID_MAX constants specify the maximum value for a process identifier (PID). For 11i v3 their value is 1,073,741,823. In releases prior to 11i v1, their value was 30,000. For 11i v1 and v2, their value was 8,388,607 (however, actual PID values generated by these versions never exceeded 30,000).
The MAXPID symbolic constant is undocumented but, nonetheless, it has been used in some programs as the maximum PID value against which other PID values are validated. The PID_MAX symbolic constant is documented but with the provision that the “Actual limit might be greater than specified value on certain
Some programs might use these constants to validate PID (or PGID or SID) values. Such programs, if compiled on releases prior to 11i v3, fail such validations on systems where PID values are larger than the MAXPID and PID_MAX value on the release under which they were compiled.
Some program code might equate these values with the maximum number of processes in the system. These programs can fail if compiled on releases before 11i v1 and if the number of processes becomes greater than 30,000.
Some programs use the constant 30,000 rather than MAXPID or PID_MAX. These programs are also vulnerable to failure.
Using Arrays to Track Processes
Because previous releases limited the maximum PID value and number of active processes to 30,000, some programmers found it convenient to use an array to track processes. The array can simply be indexed by the PID. Assuming
Such an array now needs to be 4 GB, since the maximum PID is
Five Decimal Digits
Because PID values traditionally do not exceed 30,000, some programs might be dependent on the notion that PID values do not exceed five (5) decimal digits. Issues can arise if PIDs are larger than
99,999 for the following reasons:
∙Programs that parse output from another program based on character position in the line can fail to parse it correctly when that output contains PID values.
7