You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下C#/.NET如何优雅终止子进程?替代Kill()方法

在Linux上用C# Process类实现类似kill -15/ctrl-c的优雅终止方式

在Linux环境下,.NET Core 3.0及以上版本的Process类提供了Signal方法,可以实现向子进程发送指定信号的功能,完全满足你需要的优雅终止需求:

1. 发送SIGTERM信号(对应kill -15)

SIGTERM是操作系统向进程发出的友好终止请求,进程可以捕获该信号并执行清理逻辑后正常退出,代码示例:

using System.Diagnostics;
using System.Runtime.InteropServices;

// 启动目标外部程序
var process = new Process();
process.StartInfo.FileName = "your-target-program";
process.Start();

// 向子进程发送SIGTERM信号
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    process.Signal(ProcessSignal.SigTerm);
}

2. 模拟Ctrl-C(发送SIGINT信号)

终端中按Ctrl-C本质是向进程组发送SIGINT信号,同样可以通过Signal方法实现:

if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    process.Signal(ProcessSignal.SigInt);
}

注意事项

  • 上述API仅在.NET Core 3.0/.NET 5+及以上版本中支持,若使用旧版.NET Framework,建议迁移到跨平台的.NET版本。
  • 子进程需要正确实现SIGTERM/SIGINT信号的捕获逻辑,才能真正实现优雅退出;如果子进程未处理这些信号,系统仍会强制终止它,但这属于子进程自身的实现问题。

内容的提问来源于stack exchange,提问作者XHL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:00