summaryrefslogtreecommitdiff
path: root/sys/man/2/exec
diff options
context:
space:
mode:
Diffstat (limited to 'sys/man/2/exec')
-rwxr-xr-xsys/man/2/exec200
1 files changed, 200 insertions, 0 deletions
diff --git a/sys/man/2/exec b/sys/man/2/exec
new file mode 100755
index 000000000..5c5e79669
--- /dev/null
+++ b/sys/man/2/exec
@@ -0,0 +1,200 @@
+.TH EXEC 2
+.SH NAME
+exec, execl, _privates, _nprivates, _tos \- execute a file
+.SH SYNOPSIS
+.B #include <u.h>
+.br
+.B #include <libc.h>
+.PP
+.nf
+.B
+void* exec(char *name, char* argv[])
+.PP
+.B
+void* execl(char *name, ...)
+.PP
+.B
+void **_privates;
+.PP
+.B
+int _nprivates;
+.PP
+.B
+#include <tos.h>
+.PP
+.ft L
+typedef struct Tos Tos;
+struct Tos {
+ struct { ... } prof; /* profiling data */
+ uvlong cyclefreq; /* cycle clock frequency */
+ vlong kcycles; /* kernel cycles */
+ vlong pcycles; /* process cycles (kernel + user) */
+ ulong pid; /* process id */
+ ulong clock; /* profiling clock */
+ /* top of stack is here */
+};
+.PP
+.B
+extern Tos *_tos;
+.fi
+.SH DESCRIPTION
+.I Exec
+and
+.I execl
+overlay the calling process with the named file, then
+transfer to the entry point of the image of the file.
+.PP
+.I Name
+points to the name of the file
+to be executed; it must not be a directory, and the permissions
+must allow the current user to execute it
+(see
+.IR stat (2)).
+It should also be a valid binary image, as defined in the
+.IR a.out (6)
+for the current machine architecture,
+or a shell script
+(see
+.IR rc (1)).
+The first line of a
+shell script must begin with
+.L #!
+followed by the name of the program to interpret the file
+and any initial arguments to that program, for example
+.IP
+.EX
+#!/bin/rc
+ls | mc
+.EE
+.PP
+When a C program is executed,
+it is called as follows:
+.IP
+.EX
+void main(int argc, char *argv[])
+.EE
+.PP
+.I Argv
+is a copy of the array of argument pointers passed to
+.IR exec ;
+that array must end in a null pointer, and
+.I argc
+is the number of elements before the null pointer.
+By convention, the first argument should be the name of
+the program to be executed.
+.I Execl
+is like
+.I exec
+except that
+.I argv
+will be an array of the parameters that follow
+.I name
+in the call. The last argument to
+.I execl
+must be a null pointer.
+.PP
+For a file beginning
+.BR #! ,
+the arguments passed to the program
+.RB ( /bin/rc
+in the example above) will be the name of the file being
+executed, any arguments on the
+.B #!
+line, the name of the file again,
+and finally the second and subsequent arguments given to the original
+.I exec
+call.
+The result honors the two conventions of a program accepting as argument
+a file to be interpreted and
+.B argv[0]
+naming the file being
+executed.
+.PP
+Most attributes of the calling process are carried
+into the result; in particular,
+files remain open across
+.I exec
+(except those opened with
+.B OCEXEC
+OR'd
+into the open mode; see
+.IR open (2));
+and the working directory and environment
+(see
+.IR env (3))
+remain the same.
+However, a newly
+.I exec'ed
+process has no notification handler
+(see
+.IR notify (2)).
+.PP
+The global cell
+.B _privates
+points to an array of
+.B _nprivates
+elements of per-process private data.
+This storage is private for each process, even if the processes share data segments.
+.PP
+When the new program begins, the global pointer
+.B _tos
+is set to the address of a structure
+that holds information
+allowing accurate time keeping and clock reading in user space.
+These data are updated by the kernel during of the life of the process,
+including across
+.IR rfork s
+and
+.IR exec s.
+If there is a user-space accessible fast clock (a processor
+cycle counter),
+.B cyclefreq
+will be set to its frequency in Hz.
+.B Kcycles
+.RB ( pcycles )
+counts the number of cycles
+this process has spent in kernel mode
+(kernel and user mode).
+.B Pid
+is the current process's id.
+.B Clock
+is the user-profiling clock (see
+.IR prof (1)).
+Its time is measured in milliseconds but is updated at
+a system-dependent lower rate.
+This clock is typically used by the profiler but is available
+to all programs.
+.PP
+The above conventions apply to C programs; the raw system
+interface to the new image is as follows:
+the word pointed to by the stack pointer is
+.BR argc ;
+the words beyond that are the zeroth and subsequent elements
+of
+.BR argv ,
+followed by a terminating null pointer; and
+the return register (e.g.
+.B R0
+on the 68020) contains the address of the clock information.
+.SH SOURCE
+.B /sys/src/libc/9syscall
+.br
+.B /sys/src/libc/port/execl.c
+.SH SEE ALSO
+.IR prof (1),
+.IR intro (2),
+.IR stat (2)
+.SH DIAGNOSTICS
+If these functions fail, they return and set
+.IR errstr .
+There can be no return to the calling process from a successful
+.I exec
+or
+.IR execl ;
+the calling image is lost.
+.SH BUGS
+There is a large but finite limit on the size of an argment list,
+typically around 409,600 bytes.
+The kernel constant
+.B TSTKSIZ
+controls this.