COHERENT manpages

This page displays the COHERENT manpage for execution [Definition].

List of available manpages
Index


execution -- Definition

Program execution  under COHERENT is  governed by the various  forms of the
COHERENT system call exec(). This  call allows a process to execute another
executable file (or load module).  This is described in coff.h.

The code, data  and stack of file replace those  of the requesting process.
The new  stack contains the  command arguments and its  environment, in the
format given below.  Execution starts at the entry point of file.

During a  successful call to exec(), the  system deactivates profiling, and
resets any caught signals to SIG_DFL.

Every process  has a real-user id, an  effective-user id, a saved-effective
user id; and a real-group  id, an effective-group id, and a saved-effective
group  id.   These identifiers  are  defined in  the  Lexicon entries  for,
respectively, setuid() and setgid(). For most load modules, exec() does not
change any of  these.  However, if the file is  marked with the set user id
or  set  group id  bit  (see  stat()), exec()  sets  the effective-user  id
(effective-group id) of  the process to the user id  (group id) of the file
owner.  In  effect, this changes the file access  privilege level from that
of the  real id to that  of the effective id.  The owner  of file should be
careful to limit its abilities, to avoid compromising file security.

exec()  initializes the  new stack  of  the process  to contain  a list  of
strings,  which are  command arguments.   execl(), execle(),  execlp(), and
execlpe() specify arguments  individually, as a NULL-terminated list of arg
parameters.  execv(),  execve(), execvp(), and  execvpe() specify arguments
as a single NULL-terminated array argv of parameters.

The main() function of a C program is invoked in the following way:

    main(argc, argv, envp)
    int argc;
    char *argv[], *envp[];

argc is the number of command  arguments passed through exec(), and argv is
an array of the actual argument  strings.  envp is an array of strings that
comprise the process environment.   By convention, these strings are of the
form variable=value, as  described in the Lexicon entry environ. Typically,
each variable is an exported shell variable with the given value.

execl()  and execv()  simply pass  the old  environment, referenced  by the
external pointer environ.

execle(),  execlpe(), execve(),  and execvpe() pass  a new  environment env
explicitly.

execlp(), execlpe(), execvp(), and execvpe() search for file in each of the
directories indicated by the shell variable $PATH, in the same way that the
shell searches  for a command.   These calls execute a  shell command file.
Note that  execlpe() and  execvpe() search the  current PATH, not  the PATH
contained within the environment pointed to by env.

Files

/bin/sh -- To execute command files

See Also

environ,
exec(),
execl(),
execle(),
execlp(),
execlpe(),
execv(),
execve(),
execvp(),
execvpe(),
fork(),
ioctl(),
Programming COHERENT,
signal(),
stat(),
xargs

Diagnostics

None of the exec() routines returns  if successful.  Each returns -1 for an
error,  such as  if file  does not  exist, is  not accessible  with execute
permission, has a bad format, or is too large to fit in memory.

Notes

Each exec()  routine now examines  the beginning of an  executable file for
the  token #!.  If found,  it invokes  the program named  on that  line and
passes it the rest of the  file.  For example, if you wish to ensure that a
given script  is executed  by the  by the Bourne  shell /bin/sh,  begin the
script with the line:

    #!/bin/sh