mirror of https://github.com/winsw/winsw
52 lines
2.2 KiB
Markdown
52 lines
2.2 KiB
Markdown
![]() |
Runaway Process Killer Extension
|
||
|
===
|
||
|
|
||
|
In particular cases Windows service wrapper may leak the process after the service completion.
|
||
|
It happens when WinSW gets terminated without executing the shutdown logic.
|
||
|
Examples: force kill of the service process, .NET Runtime crash, missing permissions to kill processes or a bug in the logic.
|
||
|
|
||
|
Such runaway processes may conflict with the service process once it restarts.
|
||
|
This extension allows preventing it by running the runaway process termination on startup before the executable gets started.
|
||
|
|
||
|
Since: [WinSW 2.0](../../CHANGELOG.md).
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
The extension can be configured via the [XML Configuration File](../xmlConfigFile.md). Configuration sample:
|
||
|
|
||
|
```xml
|
||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||
|
<service>
|
||
|
<id>sampleService</id>
|
||
|
<name>Sample service</name>
|
||
|
<description>This is a stub service.</description>
|
||
|
<executable>%BASE%\sleep.bat</executable>
|
||
|
<arguments></arguments>
|
||
|
<logmode>rotate</logmode>
|
||
|
|
||
|
<extensions>
|
||
|
<!-- This is a sample configuration for the RunawayProcessKiller extension. -->
|
||
|
<extension enabled="true"
|
||
|
className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension"
|
||
|
id="killOnStartup">
|
||
|
<!-- Absolute path to the PID file, which stores ID of the previously launched process. -->
|
||
|
<pidfile>%BASE%\pid.txt</pidfile>
|
||
|
<!-- Defines the process termination timeout in milliseconds.
|
||
|
This timeout will be applied multiple times for each child process.
|
||
|
After the timeout WinSW will try to force kill the process.
|
||
|
-->
|
||
|
<stopTimeout>5000</stopTimeout>
|
||
|
<!-- If true, the parent process will be terminated first if the runaway process gets terminated. -->
|
||
|
<stopParentFirst>false</stopParentFirst>
|
||
|
</extension>
|
||
|
</extensions>
|
||
|
</service>
|
||
|
```
|
||
|
|
||
|
### Notes
|
||
|
|
||
|
* The current implementation of the the extension checks only the root process (started executable)
|
||
|
* If the runaway process is detected the entire, the entire process tree gets terminated
|
||
|
* WinSW gives the runaway process a chance to the gracefully terminate.
|
||
|
If it does not do it within the timeout, the process will be force-killed.
|
||
|
* If the force kill fails, the WinSW startup continues with a warning.
|