mirror of
https://github.com/winsw/winsw.git
synced 2025-12-10 18:37:28 +08:00
* Mention optional settings * Mention removed settings * Add links to system requirements * markdownlint fixes * Remove trailing spaces * Mention boolean elements * Add preshutdown * Add `dev ps` command * Stop misleading * Why aren't you using Windows 10? * Add `stdoutPath`/`stderrPath` * Relative paths and the default working directory * Send a close message to Windows (GUI) apps * Use valid XML * Add `customize` and `dev kill` commands * Update README.md * Add commands * Fix spacing * Update installation.md * Update README.md
16 lines
994 B
Markdown
16 lines
994 B
Markdown
# Self-restarting Windows services
|
|
|
|
## Restart 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 WinSW will kill child processes recursively when it stops a service.
|
|
Windows Service Control Manager (SCM) doesn't provide the restart operation as an atomic operation either, so winsw implements restart by a sequence of stop and start.
|
|
The second winsw process in a separate process group ensures that winsw can survive this massacre to execute the start call.
|