Skip to content

Latest commit

 

History

History
16 lines (13 loc) · 1006 Bytes

selfRestartingService.md

File metadata and controls

16 lines (13 loc) · 1006 Bytes

Self-restarting Windows services

Restarting from the spawned process

To support self-restarting services, winsw exposes WINSW_EXECUTABLE environment variable into the forked process, which refers to the full path of winsw.exe that's managing the service. To restart the service from within, execute %WINSW_EXECUTABLE% restart!. Note that you are invoking restart! command, not restart command. This hidden command is a flavor of the restart operation, where winsw creates another winsw process in a separate process group, and restarts the service from there.

This additional indirection is necessary because Windows Service Control Manager (SCM) will kill child processes recursively when it stops a service. SCM doesn't provide the restart operation as an atomic operation either, so winsw implements restart by a sequence of stop and start. The 2nd winsw process in a separate process group ensures that winsw can survive this massacre to execute the start call.