The service will have no controlling terminal, but it will be a process group leader.
If the client is killed or times out or a file or descriptor being read or written by the client process gets an error then the service will be disconnected from the client. The client will return an exit status of 255 and some the service's pipes may be closed at the other end. The service will become a child of init. The service may well not notice the disconnection, though writing to a pipe after this may produce a SIGPIPE and the facility exists to have a SIGHUP sent to the service on disconnection.
Pipes which may be written to will be closed if a write error occurs on the corresponding client-side file or descriptor, which may result in a SIGPIPE in the service program; pipes open for reading will get EOF if the client-side file descriptor gets EOF or an error.
If the service closes one of its reading file descriptors the writing end of the corresponding pipe will generate a SIGPIPE when attempts are made by the client/daemon pair to write to it. This will not be considered an error; rather, the relevant pipe will be discarded and the corresponding file or file descriptor held by the client will be closed.
Likewise, if one of the file descriptors held by the client for writing by the service is a pipe whose other end is closed by the caller then the client/daemon pair will see an error when trying to copy data provided by the service. This too will not be considered an error; rather, the pipe correspondong to that descriptor will be closed and any further writes will cause the service to get a SIGPIPE.
Note that not all write errors or broken pipes on file descriptors may be visible to the service, since buffered data may be discarded by the operating system and there will be a finite interval between the error happening and the service being disconnected from the client or the next write causing a SIGPIPE.
Read errors on file descriptors (and disconnection) will only be visible to the service and distinguishable from normal end of file if disconnect-hup is in effect.
Read and write errors (other than broken pipes, as described above) will always be visible to the caller; they are system errors, and will therefore cause the client to print an error message to stderr and return with an exit status of 255.
If the main service program process exits while it still has running
children any file descriptors held by those children can remain open,
depending on the use of wait
, nowait
or close
for the
relevant file descriptor in the client's arguments. By default
writing filedescriptors remain open and the client will wait for them
to be closed at the service end, and reading file descriptors are
closed immediately. These leftover child processes will not get a any
SIGHUP even if a read or write error occurs or the client
disconnects before then.
USERV_USER
USERV_UID
USERV_GID
USERV_GROUP
USERV_CWD
USERV_SERVICE
USERV_U_
name