Skip to content

clarius/dotnet-stop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Icon dotnet-stop

Version Downloads License

A dotnet global tool that gracefully stops processes by sending them SIGINT (Ctrl+C) in a cross platform way.

Why

PowerShell's Stop-Process (and the underlying TerminateProcess on Windows / SIGKILL on Unix) kills a process immediately — the target has no opportunity to clean up. This matters for apps that rely on graceful shutdown: flushing writes to disk, completing in-flight work, disposing resources, or honouring a CancellationToken in a .NET IHost/IHostedService.

dnx stop sends SIGINT instead — the same signal as pressing Ctrl+C — which lets the process shut down on its own terms. On Windows this is non-trivial to do programmatically; it requires detaching from the current console, attaching to the target process's console group, and calling GenerateConsoleCtrlEvent. This tool handles all of that transparently, cross-platform.

dnx stop [<processId>] [--timeout <milliseconds>] [--quiet]
Usage: [arguments...] [options...] [-h|--help] [--version]

Sends the SIGINT (Ctrl+C) signal to a process to gracefully stop it.

Arguments:
  [0] <int?>    ID of the process to stop. When omitted, reads process IDs from standard input.

Options:
  -t, --timeout <int?>    Optional timeout in milliseconds to wait for the process to exit.
  -q, --quiet             Do not display any output.

If no timeout is provided, the tool will wait indefinitely for the target process to exit. Otherwise, the process will exit with a non-zero exit code if the target process didn't exit within the specified timeout time.

Piping from PowerShell

When no process ID is given, dnx stop reads process IDs from standard input. This allows piping directly from PowerShell's Get-Process:

# Stop all processes named 'foo'
Get-Process -Name foo | dnx stop

# Stop multiple processes by name
Get-Process -Name foo, bar | dnx stop

You can also pipe just the IDs:

Get-Process -Name foo | Select-Object -ExpandProperty Id | dnx stop

Sponsors

Clarius Org MFB Technologies, Inc. Khamza Davletov SandRock DRIVE.NET, Inc. Keith Pickford Thomas Bolon Kori Francis Reuben Swartz Jacob Foshee Eric Johnson Jonathan Ken Bonny Simon Cropp agileworks-eu Zheyu Shen Vezel ChilliCream 4OTC domischell Adrian Alonso torutek Ryan McCaffery Seika Logiciel Andrew Grant eska-gmbh

Sponsor this project

Learn more about GitHub Sponsors

Contributors