In OpenXM we adopted the following simple and robust method to control servers.
An OpenXM server has logically two I/O channels: one for exchanging data for computations and the other for controlling computations. The control channel is used to send commands to control execution on the server. The sample server (oxmain.c) processes such control messages on another process. We call such a process a control server. In contrast, we call a server for computation an engine. As the control server and the engine runs on the same machine, it is easy to send a signal from the control server. A control server is also an OpenXM stack machine and it accepts SM_control_* commands to send signals to a server or to terminate a server.