Open System Services Porting Guide (G06.29+, H06.06+, J06.03+)

Beginning with the H06.24 and J06.13 RVUs, 64-bit OSS processes are supported and can be
created by OSS and native Guardian processes. For information about 64-bit OSS processes, see
the 64-Bit Support in OSS and Guardian chapter in the Open System Services Programmer's
Guide.
Using the fork() and exec Set of Functions
The standard POSIX.1 fork() function and exec set of functions are implemented in the OSS
environment. In addition to the normal POSIX.1 inheritance rules, the child process also inherits a
number of Guardian attributes from the parent process. Table 9 illustrates some of the key differences
in process attributes after the execution of the fork() function or the exec set of functions in the
OSS environment.
Table 9 Process Attributes for fork() and exec Set of Functions
exec Set of Functionsfork()
New program fileSame program file
Same OSS process IDNew OSS process ID
New data spaceCopies parent data space
Installs new arg and env parametersRetains parent arg and env parameters
Controlled file open propagationInherits open files
No signal handlerInherits signal handlers
Same processor only; processor migration with tdm_execve set of
functions
Same processor only
New process handleNew process handle
No shared memory segments inheritedShared memory segments inherited
No breakpoints inheritedNo breakpoints inherited
The behavior of these function calls is as expected in POSIX-compliant environments, except for
some side effects specific to the HP environment. It is not possible to migrate a process to another
processor using either fork() or the exec set of functions, but it is possible to do this using the
tdm_execve set of functions. The tdm_execve set of functions is discussed more in “Using HP
Extensions” (page 129).
One side effect of using the exec set of functions is that the process handle is changed. After
successful operation of the fork() call, the initial position within an EDIT file opened by a call to
the OSS open() function is the same for both the parent and the child processes. Changing the
position used by one process, however, does not change the position used by the other process.
Using the exit() Function
The exit() function call can be issued by either an OSS process or a Guardian process. If the
parent process is an OSS process, the normal SIGCHLD signal is sent to notify the parent process
of the death of one of its child processes. Child processes of a terminated process are assigned a
parent process ID of 1.
Using the kill() Function
The target of a kill() function call must be an OSS process or group of OSS processes. kill()
cannot send signals to Guardian processes because they do not have OSS process IDs. Additional
restrictions are imposed by the Safeguard security mechanism on the sending of signals if Safeguard
protection is used on OSS processes. OSS processes can catch all of the normal kill() signals
defined in the XPG4 specifications.
128 Porting UNIX Applications to the OSS Environment