Previous | Contents | Index |
Creates, on behalf of the calling process, a subprocess or detached process on the current node, or a detached process on another OpenVMS Cluster node.
SYS$CREPRC [pidadr] ,[image] ,[input] ,[output] ,[error] ,[prvadr] ,[quota] ,[prcnam] ,[baspri] ,[uic] ,[mbxunt] ,[stsflg] ,[itmlst] ,[node] ,[home_rad]
int sys$creprc (unsigned int *pidadr, void *image, void *input, void *output, void *error, struct _generic_64 *prvadr, unsigned int *quota, void *prcnam, unsigned int baspri, unsigned int uic, unsigned short int mbxunt, unsigned int stsflg,...);
pidadr
OpenVMS usage: process_id type: longword (unsigned) access: write only mechanism: by reference
Process identification (PID) of the newly created process. The pidadr argument is the address of a longword into which $CREPRC writes the PID.image
OpenVMS usage: logical_name type: character-coded text string access: read only mechanism: by descriptor--fixed-length string descriptor
Name of the image to be activated in the newly created process. The image argument is the address of a character string descriptor pointing to the file specification of the image.The image name can have a maximum of 63 characters. If the image name contains a logical name, the logical name is translated in the created process and must therefore be in a logical name table that it can access.
To create a process that will run under the control of a command language interpreter (CLI), specify SYS$SYSTEM:LOGINOUT.EXE as the image name.
input
OpenVMS usage: logical_name type: character-coded text string access: read only mechanism: by descriptor--fixed-length string descriptor
Equivalence name to be associated with the logical name SYS$INPUT in the logical name table of the created process. The input argument is the address of a character string descriptor pointing to the equivalence name string.output
OpenVMS usage: logical_name type: character-coded text string access: read only mechanism: by descriptor--fixed-length string descriptor
Equivalence name to be associated with the logical name SYS$OUTPUT in the logical name table of the created process. The output argument is the address of a character string descriptor pointing to the equivalence name string.error
OpenVMS usage: logical_name type: character-coded text string access: read only mechanism: by descriptor--fixed-length string descriptor
Equivalence name to be associated with the logical name SYS$ERROR in the logical name table of the created process. The error argument is the address of a character string descriptor pointing to the equivalence name string.Note that the error argument is ignored if the image argument specifies SYS$SYSTEM:LOGINOUT.EXE; in this case, SYS$ERROR has the same equivalence name as SYS$OUTPUT.
prvadr
OpenVMS usage: mask_privileges type: quadword (unsigned) access: read only mechanism: by reference
Privileges to be given to the created process. The prvadr argument is the address of a quadword bit mask wherein each bit corresponds to a privilege; setting a bit gives the privilege. If the prvadr argument is not specified, the current privileges are used.Each bit has a symbolic name; the $PRVDEF macro defines these names. You form the bit mask by specifying the symbolic name of each desired privilege in a logical OR operation.
Table SYS-20 gives the symbolic name and description of each privilege.
Table SYS-20 User Privileges Privilege Symbolic Name Description ACNT PRV$M_ACNT Create processes for which no accounting is done ALLSPOOL PRV$M_ALLSPOOL Allocate a spooled device ALTPRI PRV$M_ALTPRI Set (alter) any process priority AUDIT PRV$M_AUDIT Generate audit records BUGCHK PRV$M_BUGCHK Make bugcheck error log entries BYPASS PRV$M_BYPASS Bypass UIC-based protection CMEXEC PRV$M_CMEXEC Change mode to executive CMKRNL PRV$M_CMKRNL Change mode to kernel DIAGNOSE PRV$M_DIAGNOSE Can diagnose devices DOWNGRADE PRV$M_DOWNGRADE Can downgrade classification EXQUOTA PRV$M_EXQUOTA Can exceed quotas GROUP PRV$M_GROUP Group process control GRPNAM PRV$M_GRPNAM Place name in group logical name table GRPPRV PRV$M_GRPPRV Group access via system protection field IMPERSONATE 1 PRV$M_IMPERSONATE Can create detached processes under another UIC IMPORT PRV$M_IMPORT Mount a nonlabeled tape volume LOG_IO PRV$M_LOG_IO Perform logical I/O operations MOUNT PRV$M_MOUNT Issue mount volume QIO NETMBX PRV$M_NETMBX Create a network device OPER PRV$M_OPER All operator privileges PFNMAP PRV$M_PFNMAP Map to section by physical page frame number PHY_IO PRV$M_PHY_IO Perform physical I/O operations PRMCEB PRV$M_PRMCEB Create permanent common event flag clusters PRMGBL PRV$M_PRMGBL Create permanent global sections PRMMBX PRV$M_PRMMBX Create permanent mailboxes PSWAPM PRV$M_PSWAPM Change process swap mode READALL PRV$M_READALL Possess read access to everything SECURITY PRV$M_SECURITY Can perform security functions SETPRV PRV$M_SETPRV Set any process privileges SHARE PRV$M_SHARE Can assign a channel to a nonshared device SYSGBL PRV$M_SYSGBL Create system global sections SYSLCK PRV$M_SYSLCK Queue systemwide locks SYSNAM PRV$M_SYSNAM Place name in system logical name table SYSPRV PRV$M_SYSPRV Access files and other resources as if you have a system UIC TMPMBX PRV$M_TMPMBX Create temporary mailboxes UPGRADE PRV$M_UPGRADE Can upgrade classification VOLPRO PRV$M_VOLPRO Override volume protection WORLD PRV$M_WORLD World process control
You need the user privilege SETPRV to grant a process any privileges other than your own. If the caller does not have this privilege, the mask is minimized with the current privileges of the creating process; any privileges the creating process does not have are not granted, but no error status code is returned.
OpenVMS usage: | item_quota_list |
type: | longword (unsigned) |
access: | read only |
mechanism: | by reference |
If you do not specify the quota argument or specify it as 0, the operating system supplies a default value for each quota.
For example, in MACRO you can specify a quota list, as follows:
QLIST: .BYTE PQL$_PRCLM ; Limit number of subprocesses .LONG 2 ; Max = 2 subprocesses .BYTE PQL$_ASTLM ; Limit number of asts .LONG 6 ; Max = 6 outstanding asts .BYTE PQL$_LISTEND ; End of quota list |
The $PQLDEF macro defines symbolic names for quotas.
In C you can specify a quota list, as follows:
#include <pqldef.h> ... #pragma member_alignment save #pragma nomember_alignment typedef struct { char Quota; int Value; } QUOTA_ENTRY_T; #pragma member_alignment restore ... QUOTA_ENTRY_T QuotaArray[] = {{PQL$_PRCLM, 2}, {PQL$_ASTLM, 6}, {PQL$_LISTEND, 0}}; |
A description of each quota follows. The description of each quota lists its minimum value (a system parameter), its default value (a system parameter), and whether it is deductible, nondeductible, or pooled. These terms have the following meanings:
Minimum value | A process cannot be created with a quota less than this minimum. Any quota value you specify is maximized against this minimum. You obtain the minimum value for a quota by running SYSGEN to display the corresponding system parameter. |
Default value | If the quota list does not specify a value for a particular quota, the system assigns the process this default value. You obtain the default value by running SYSGEN to display the corresponding system parameter. |
Deductible quota | When you create a subprocess, the value for a deductible quota is subtracted from the creating process's current quota and is returned to the creating process when the subprocess is deleted. There is currently only one deductible quota, the CPU time limit. Note that quotas are never deducted from the creating process when a detached process is created. |
Nondeductible quota | Nondeductible quotas are established and maintained separately for each process and subprocess. |
Pooled quota | Pooled quotas are established when a detached process is created, and they are shared by that process and all its descendent subprocesses. Charges against pooled quota values are subtracted from the current available totals as they are used and are added back to the total when they are not being used. |
To run SYSGEN to determine the minimum and default values of a quota, enter the following sequence of commands:
$ RUN SYS$SYSTEM:SYSGEN SYSGEN> SHOW/PQL |
Minimum values are named PQL_Mxxxxx, where xxxxx are the characters of the quota name that follow "PQL$_" in the quota name.
Default values are named PQL_Dxxxxx, where xxxxx are the characters of the quota name that follow "PQL$_" in the quota name.
PQL$_ASTLM
Asynchronous system trap (AST) limit. This quota restricts both the number of outstanding AST routines specified in system service calls that accept an AST address and the number of scheduled wakeup requests that can be issued.Minimum: PQL_MASTLM
Default: PQL_DASTLM
NondeductiblePQL$_BIOLM
Buffered I/O limit. This quota limits the number of outstanding system-buffered I/O operations. A buffered I/O operation is one that uses an intermediate buffer from the system pool rather than a buffer specified in a process's $QIO request.Minimum: PQL_MBIOLM
Default: PQL_DBIOLM
NondeductiblePQL$_BYTLM
Buffered I/O byte count quota. This quota limits the amount of system space that can be used to buffer I/O operations or to create temporary mailboxes.Minimum: PQL_MBYTLM
Default: PQL_DBYTLM
PooledPQL$_CPULM
CPU time limit, specified in units of 10 milliseconds. This quota limits the total amount of CPU time that a created process can use. When it has exhausted its CPU time limit quota, the created process is deleted and the status code SS$_EXCPUTIM is returned.If you do not specify this quota and the created process is a detached process, the detached process receives a default value of 0, that is, unlimited CPU time.
If you do not specify this quota and the created process is a subprocess, the subprocess receives half the CPU time limit quota of the creating process.
If you specify this quota as 0, the created process has unlimited CPU time, provided the creating process also has unlimited CPU time. If, however, the creating process does not have unlimited CPU time, the created process receives half the CPU time limit quota of the creating process.
The CPU time limit quota is a consumable quota; that is, the amount of CPU time used by the created process is not returned to the creating process when the created process is deleted.
Minimum: PQL_MCPULM
Default: PQL_DCPULM
DeductiblePQL$_DIOLM
Direct I/O quota. This quota limits the number of outstanding direct I/O operations. A direct I/O operation is one for which the system locks the pages containing the associated I/O buffer in memory for the duration of the I/O operation.Minimum: PQL_MDIOLM
Default: PQL_DDIOLM
NondeductiblePQL$_ENQLM
Lock request quota. This quota limits the number of lock requests that a process can queue.Minimum: PQL_MENQLM
Default: PQL_DENQLM
PooledPQL$_FILLM
Open file quota. This quota limits the number of files that a process can have open at one time.Minimum: PQL_MFILLM
Default: PQL_DFILLM
PooledPQL$_JTQUOTA
Job table quota. This quota limits the number of bytes of system paged pool used for the job logical name table. If the process being created is a subprocess, this item is ignored.A value of 0 represents an unlimited number of bytes.
Minimum: PQL_MJTQUOTA
Default: PQL_DJTQUOTA
NondeductiblePQL$_PGFLQUOTA
Paging file quota. This quota limits the number of pages (on VAX systems) or pagelets (adjusted up or down to represent CPU-specific pages on Alpha and I64 systems) that can be used to provide secondary storage in the paging file for the execution of a process.Minimum: PQL_MPGFLQUOTA
Default: PQL_DPGFLQUOTA
PooledPQL$_PRCLM
Subprocess quota. This quota limits the number of subprocesses a process can create.Minimum: PQL_MPRCLM
Default: PQL_DPRCLM
PooledPQL$_TQELM
Timer queue entry quota. This quota limits both the number of timer queue requests a process can have outstanding and the creation of temporary common event flag clusters.Minimum: PQL_MTQELM
Default: PQL_DTQELM
PooledPQL$_WSDEFAULT
Default working set size. This quota defines the number of pages (on VAX systems) or pagelets (adjusted up or down to represent CPU-specific pages on Alpha and I64 systems) in the default working set for any image the process executes. The working set size quota determines the maximum size you can specify for this quota.Minimum: PQL_MWSDEFAULT
Default: PQL_DWSDEFAULT
NondeductiblePQL$_WSEXTENT
Working set expansion quota. This quota limits the maximum size to which an image can expand its working set size with the Adjust Working Set Limit ($ADJWSL) system service.Minimum: PQL_MWSEXTENT
Default: PQL_DWSEXTENT
NondeductiblePQL$_WSQUOTA
Working set size quota. This quota limits the maximum size to which an image can lock pages in its working set with the Lock Pages in Memory ($LCKPAG) system service.Minimum: PQL_MWSQUOTA
Default: PQL_DWSQUOTA
Nondeductible
The values specified in the quota list are not necessarily the quotas that are actually assigned to the created process. The $CREPRC service performs the following steps to determine the quota values that are assigned when you create a process on the same node:
When you create a detached process on another OpenVMS Cluster node, the quotas assigned to the process are determined in the following way:
OpenVMS usage: | process_name |
type: | character-coded text string |
access: | read only |
mechanism: | by descriptor--fixed-length string descriptor |
If a subprocess is being created, the process name is implicitly qualified by the UIC group number of the creating process. If a detached process is being created, the process name is qualified by the group number specified in the uic argument.
OpenVMS usage: | longword_unsigned |
type: | longword (unsigned) |
access: | read only |
mechanism: | by value |
The OpenVMS VAX range is 0 to 31, where 31 is the highest priority and 0 is the lowest. Usual priorities are in the range 0 to 15, and real-time priorities are in the range 16 to 31.
The OpenVMS Alpha and I64 range is 0 to 63, with real-time priorities in the range 32 to 63.
If you want a created process to have a higher priority than its creating process, you must have ALTPRI privilege to raise the priority level. If the caller does not have this privilege, the specified base priority is compared with the caller's priority and the lower of the two values is used.
A process with ALTPRI privilege running on a VAX node can create a process with a priority greater than 31 on an Alpha or I64 node.
If the baspri argument is not specified, the priority defaults to 2 for VAX MACRO, VAX BLISS--32, and Pascal; it defaults to 0 for all other languages.
OpenVMS usage: | uic |
type: | longword (unsigned) |
access: | read only |
mechanism: | by value |
If you do not specify the uic argument or specify it as 0 (the default), $CREPRC creates a process and assigns it the UIC of the creating process.
If you specify a nonzero value for the uic argument, $CREPRC creates a detached process. This value is interpreted as a 32-bit octal number, with two 16-bit fields:
bits 0--15---member number
bits 16--31---group number
You need IMPERSONATE or CMKRNL privilege to create a detached process with a UIC that is different from the UIC of the creating process.
If the image argument specifies the SYS$SYSTEM:LOGINOUT.EXE, the UIC of the created process will be the UIC of the caller of $CREPRC, and the UIC parameter is ignored.
OpenVMS usage: | word_unsigned |
type: | word (unsigned) |
access: | read only |
mechanism: | by value |
If you do not specify the mbxunt argument or specify it as 0 (the default), the operating system sends no termination message when it deletes the process.
The Get Device/Volume Information ($GETDVI) service can be used to obtain the unit number of the mailbox.
If you specify the mbxunt argument, the mailbox is used when the created process actually terminates. At that time, the $ASSIGN service is issued for the mailbox in the context of the terminating process and an accounting message is sent to the mailbox. If the mailbox no longer exists, cannot be assigned, or is full, the error is treated as if no mailbox had been specified.
Previous | Next | Contents | Index |