Initiation of a procedure as an independent program consists of setting up a separate stack, passing any parameters (call-by-value only), and beginning the execution of the initiated procedure. For more information on the procedure identifier, see PROCEDURE Declaration.
The initiating program continues execution, and both the initiated procedure and the initiating program run in parallel. The initiated procedure must be compiled separately and declared EXTERNAL in the initiating program.
A procedure initiated by a RUN statement, as opposed to a PROCESS statement, is independent of the initiating program. No critical block exists for the initiated procedure, and the initiating program can finish processing while the external procedure continues running.
The contents of the designated task are copied by the operating system so that the initiated procedure has its own task variable. Before initiation, the values of the task attributes of the task, such as COREESTIMATE, STACKSIZE, and DECLAREDPRIORITY, can be used to control the execution of the procedure. For information about assigning values to task attributes, refer to <arithmetic task attribute> under Arithmetic Assignment and <Boolean task attribute> under Boolean Assignment and Task Assignment. For information about the task designator, see TASK and TASK ARRAY Declarations.
Because array and file parameters cannot be call-by-value, procedures with array or file parameters cannot be invoked with a RUN statement. Also, a procedure that has a pointer or string as a parameter, whether or not it is specified as call-by-value, cannot be invoked with a RUN statement.
If the specified procedure is a typed procedure, the return value is discarded.
If the procedure identifier is a system-supplied process, such as an intrinsic, the library GENERALSUPPORT must be declared using a library entry point specification. The procedure identifier must be declared in the program or the syntax error PROCEDURE MUST BE USER DECLARED results.

