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
相关产品推荐
相关产品推荐

