Annotation of 43BSDReno/share/doc/ps1/06.sysman/1.1.t, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1983 Regents of the University of California.
        !             2: .\" All rights reserved.  The Berkeley software License Agreement
        !             3: .\" specifies the terms and conditions for redistribution.
        !             4: .\"
        !             5: .\"    @(#)1.1.t       6.2 (Berkeley) 5/12/86
        !             6: .\"
        !             7: .sh "Processes and protection
        !             8: .NH 3
        !             9: Host and process identifiers
        !            10: .PP
        !            11: Each UNIX host has associated with it a 32-bit host id, and a host
        !            12: name of up to 64 characters (as defined by MAXHOSTNAMELEN in
        !            13: \fI<sys/param.h>\fP).
        !            14: These are set (by a privileged user)
        !            15: and returned by the calls:
        !            16: .DS
        !            17: sethostid(hostid)
        !            18: long hostid;
        !            19: 
        !            20: hostid = gethostid();
        !            21: result long hostid;
        !            22: 
        !            23: sethostname(name, len)
        !            24: char *name; int len;
        !            25: 
        !            26: len = gethostname(buf, buflen)
        !            27: result int len; result char *buf; int buflen;
        !            28: .DE
        !            29: On each host runs a set of \fIprocesses\fP.
        !            30: Each process is largely independent of other processes,
        !            31: having its own protection domain, address space, timers, and
        !            32: an independent set of references to system or user implemented objects.
        !            33: .PP
        !            34: Each process in a host is named by an integer
        !            35: called the \fIprocess id\fP.  This number is
        !            36: in the range 1-30000
        !            37: and is returned by
        !            38: the \fIgetpid\fP routine:
        !            39: .DS
        !            40: pid = getpid();
        !            41: result int pid;
        !            42: .DE
        !            43: On each UNIX host this identifier is guaranteed to be unique;
        !            44: in a multi-host environment, the (hostid, process id) pairs are
        !            45: guaranteed unique.
        !            46: .NH 3
        !            47: Process creation and termination
        !            48: .PP
        !            49: A new process is created by making a logical duplicate of an
        !            50: existing process:
        !            51: .DS
        !            52: pid = fork();
        !            53: result int pid;
        !            54: .DE
        !            55: The \fIfork\fP call returns twice, once in the parent process, where
        !            56: \fIpid\fP is the process identifier of the child,
        !            57: and once in the child process where \fIpid\fP is 0.
        !            58: The parent-child relationship induces a hierarchical structure on
        !            59: the set of processes in the system.
        !            60: .PP
        !            61: A process may terminate by executing an \fIexit\fP call:
        !            62: .DS
        !            63: exit(status)
        !            64: int status;
        !            65: .DE
        !            66: returning 8 bits of exit status to its parent.
        !            67: .PP
        !            68: When a child process exits or
        !            69: terminates abnormally, the parent process receives
        !            70: information about any
        !            71: event which caused termination of the child process.  A
        !            72: second call provides a non-blocking interface and may also be used
        !            73: to retrieve information about resources consumed by the process during its
        !            74: lifetime.
        !            75: .DS
        !            76: #include <sys/wait.h>
        !            77: 
        !            78: pid = wait(astatus);
        !            79: result int pid; result union wait *astatus;
        !            80: 
        !            81: pid = wait3(astatus, options, arusage);
        !            82: result int pid; result union waitstatus *astatus;
        !            83: int options; result struct rusage *arusage;
        !            84: .DE
        !            85: .PP
        !            86: A process can overlay itself with the memory image of another process,
        !            87: passing the newly created process a set of parameters, using the call:
        !            88: .DS
        !            89: execve(name, argv, envp)
        !            90: char *name, **argv, **envp;
        !            91: .DE
        !            92: The specified \fIname\fP must be a file which is in a format recognized
        !            93: by the system, either a binary executable file or a file which causes
        !            94: the execution of a specified interpreter program to process its contents.
        !            95: .NH 3
        !            96: User and group ids
        !            97: .PP
        !            98: Each process in the system has associated with it two user-id's:
        !            99: a \fIreal user id\fP and a \fIeffective user id\fP, both 16 bit
        !           100: unsigned integers (type \fBuid_t\fP).
        !           101: Each process has an \fIreal accounting group id\fP and an \fIeffective
        !           102: accounting group id\fP and a set of
        !           103: \fIaccess group id's\fP.  The group id's are 16 bit unsigned integers
        !           104: (type \fBgid_t\fP).
        !           105: Each process may be in several different access groups, with the maximum
        !           106: concurrent number of access groups a system compilation parameter,
        !           107: the constant NGROUPS in the file \fI<sys/param.h>\fP,
        !           108: guaranteed to be at least 8.
        !           109: .PP
        !           110: The real and effective user ids associated with a process are returned by:
        !           111: .DS
        !           112: ruid = getuid();
        !           113: result uid_t ruid;
        !           114: 
        !           115: euid = geteuid();
        !           116: result uid_t euid;
        !           117: .DE
        !           118: the real and effective accounting group ids by:
        !           119: .DS
        !           120: rgid = getgid();
        !           121: result gid_t rgid;
        !           122: 
        !           123: egid = getegid();
        !           124: result gid_t egid;
        !           125: .DE
        !           126: The access group id set is returned by a \fIgetgroups\fP call*:
        !           127: .DS
        !           128: ngroups = getgroups(gidsetsize, gidset);
        !           129: result int ngroups; int gidsetsize; result int gidset[gidsetsize];
        !           130: .DE
        !           131: .FS
        !           132: * The type of the gidset array in getgroups and setgroups
        !           133: remains integer for compatibility with 4.2BSD.
        !           134: It may change to \fBgid_t\fP in future releases.
        !           135: .FE
        !           136: .PP
        !           137: The user and group id's
        !           138: are assigned at login time using the \fIsetreuid\fP, \fIsetregid\fP,
        !           139: and \fIsetgroups\fP calls:
        !           140: .DS
        !           141: setreuid(ruid, euid);
        !           142: int ruid, euid;
        !           143: 
        !           144: setregid(rgid, egid);
        !           145: int rgid, egid;
        !           146: 
        !           147: setgroups(gidsetsize, gidset)
        !           148: int gidsetsize; int gidset[gidsetsize];
        !           149: .DE
        !           150: The \fIsetreuid\fP call sets both the real and effective user-id's,
        !           151: while the \fIsetregid\fP call sets both the real
        !           152: and effective accounting group id's.
        !           153: Unless the caller is the super-user, \fIruid\fP
        !           154: must be equal to either the current real or effective user-id,
        !           155: and \fIrgid\fP equal to either the current real or effective
        !           156: accounting group id.  The \fIsetgroups\fP call is restricted
        !           157: to the super-user.
        !           158: .NH 3
        !           159: Process groups
        !           160: .PP
        !           161: Each process in the system is also normally associated with a \fIprocess
        !           162: group\fP.  The group of processes in a process group is sometimes
        !           163: referred to as a \fIjob\fP and manipulated by high-level system
        !           164: software (such as the shell).
        !           165: The current process group of a process is returned by the
        !           166: \fIgetpgrp\fP call:
        !           167: .DS
        !           168: pgrp = getpgrp(pid);
        !           169: result int pgrp; int pid;
        !           170: .DE
        !           171: When a process is in a specific process group it may receive
        !           172: software interrupts affecting the group, causing the group to
        !           173: suspend or resume execution or to be interrupted or terminated.
        !           174: In particular, a system terminal has a process group and only processes
        !           175: which are in the process group of the terminal may read from the
        !           176: terminal, allowing arbitration of terminals among several different jobs.
        !           177: .PP
        !           178: The process group associated with a process may be changed by
        !           179: the \fIsetpgrp\fP call:
        !           180: .DS
        !           181: setpgrp(pid, pgrp);
        !           182: int pid, pgrp;
        !           183: .DE
        !           184: Newly created processes are assigned process id's distinct from all
        !           185: processes and process groups, and the same process group as their
        !           186: parent.  A normal (unprivileged) process may set its process group equal
        !           187: to its process id.  A privileged process may set the process group of any
        !           188: process to any value.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.