1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
fork
SYNOPSIS
Create a new process via the fork system function
USAGE
Int_Type fork ()
DESCRIPTION
The `fork' function creates a new child process via the
`fork' system function. See the approriate documentation for
the actual semantics involved such as what is preserved in the child
process. Upon sucess, the function returns a value that is greater
than 0 to the parent process that represents the child process's id.
It will return 0 to the child process. If the fork function fails, a
value of -1 will be returned and `errno' set accordingly.
EXAMPLE
The following example creates a child process to invoke the ``ls''
command on a Unix system. It also illustrates the low-level nature
of the `fork' and related system calls.
define ls ()
{
variable pid = fork ();
if (pid == -1)
throw OSError, "fork failed: " + errno_string(errno);
if ((pid == 0)
&& (-1 == execvp ("ls", ["ls", "-l"])))
{
() = fprintf (stderr, "execvp failed: " + errno_string(errno));
_exit (1);
}
forever
{
variable status = waitpid (pid, 0);
if (status == NULL)
{
if (errno == EINTR) continue;
throw OSError, "waitpid failed: " + errno_string(errno);
}
return status.exit_status;
}
}
SEE ALSO
waitpid, execv, execvp, execve, _exit, system
--------------------------------------------------------------
execve, execv, execvp
SYNOPSIS
Execute a new process
USAGE
Int_Type execve(path, argv[], envp[])
Int_Type execvp(path, argv[])}
Int_Type execv(path, argv[])}
DESCRIPTION
The `execv' family of functions overlay the current process
with a new process that corresponds to the program specified by the
`path' argument. If for some reason the function fails, a
value of -1 will be returned with `errno' set accordingly.
Normally the function will not return.
The `argv' parameter is an array of strings that will
correspond to the argument list used when invoking the program. For
example, if the invoked program is a C program, the `argv'
parameter will correspond to the C program's argv-list.
The `execve' function takes an array of strings that will be
used to initialize the environment of the overlayed program.
The `execvp' function will mimick the actions `/bin/sh' when
searching for the executable file.
NOTES
These function are wrappers around the corresponding system library
functions. See the system documentation for more information.
SEE ALSO
execve, execvp, system, fork, _exit
--------------------------------------------------------------
_exit
SYNOPSIS
Exit the current processes
USAGE
_exit(Int_Type status)
DESCRIPTION
Like the related `exit' function, `_exit' may be used to
terminate the current process. One of the differences between the two
functions is that the `_exit' will not invoke various ``atexit''
handlers that are normally run when a program is terminated. See
the system-specific C runtime library documentation for more
information about this function.
The main use of the `_exit' function is after the failure of
one of the `execv' functions in a child process.
SEE ALSO
fork, execv, execvp, execve, waitpid, exit
--------------------------------------------------------------
waitpid
SYNOPSIS
Wait for a specified process
USAGE
Struct_Type waitpid (pid, options)
DESCRIPTION
The `waitpid' function will cause the calling process to wait
for the child process whose process id is `pid' to change its
state, e.g., exit. It returns information about the process in the
form of a structure with the following fields:
pid The process-id of the child process, 0 if the process
has not changed state.
exited Non-zero if the child exited normally.
exit_status The exit status of the child. This field is
meaninful only if the exited field is non-zero.
signal Non-zero of the child was terminated by a signal.
The value of this field is that of the signal.
coredump Non-zero if the child produced a core-dump as the
result of termination by a signal.
stopped Non-zero if the child was stopped via a signal. The
value is that of the signal that stopped it.
continued Non-zero if the process was continued.
Upon error, the function will return NULL and set `errno'
accordingly.
The value of the `options' parameter is the bitwise-or of one
of the following values:
WNOHANG causes waitpid to return immediately if the child has
not terminated. In this case, the value of the pid
field will be 0 if the child is still running.
WUNTRACED (see semantics in the OS documentation)
WCONTINUED (see semantics in the OS documentation)
EXAMPLE
s = waitpid (pid, WNOHANG);
if (s == NULL)
throw OSError, "waitpid failed: " + errno_string ();
if (s.pid == 0)
message ("The child is still running");
else if (s.exited)
vmessage ("child exited with status %d", s.exit_status);
else if (s.signal)
{
vmessage ("child terminated by signal %d %s",
s.signal, (s.coredump ? "(coredump)" : ""));
}
SEE ALSO
fork, new_process
--------------------------------------------------------------
|