The Berkeley Unix operating system is evolving into a more distributed computing environment. As such, applications written for it will increasingly consist of programs that spawn several processes, processes which may reside on more than one machine. A distributed system must provide facilities through which the processes that are part of such distributed computations can be controlled. There must be a way of terminating these processes, suspending their execution, restarting them, and otherwise notifying them of asynchronous internal and external events that require their attention. Unix signals, which can be viewed as software interrupts, allow processes to be controlled in this way. In the current implementation, however, their use is limited to processes within a single host. There must also be available facilities for debugging-style process control, such as inspecting and modifying a process's address space. Debugging-style process control is currently provided by ptrace()
, which is also very limited in the context of distributed process control.
The process control scheme presented here allows processes to send each other process control information through the Unix interprocess communication facility. Processes acquire an endpoint for communication, or socket in Berkeley Unix terminology, that is used to receive the control information for the process. The use of a general message delivery system such as Unix interprocess communication permits a set of process control mechanisms to act among any set of processes, even when such processes reside on different machines.