如何在 Go 中超时后彻底终止进程及其所有子进程
本文介绍在 go 中安全、可靠地实现进程超时控制的方法,重点解决主进程被杀后子进程(尤其是多级子进程)残留的问题,通过设置进程组并发送信号实现整棵树的清理。 本文介绍在 go 中安全、可靠地实现进程超时控制的方法,重点解决主进程被杀后子进程(尤其是多级子进程)残留的问题,通过设置进程组并发送信号实现整棵树的清理。在 Go 中使用 os/exec 启动外部命令时,若仅调用 cmd.Process.Kill(),默认只会终止直接创建的父进程,而其派生的子进程(如 shell 启动的管道、后台任务、递归 fork 的守护进程等)将脱离原进程树,成为孤儿进程并继续运行——这极易导致资源泄漏、端口占用或重复执行等严重问题。根本解法是利用 Unix/Linux 的进程组(Process Group)机制:将主进程及其所有后代统一纳入同一个进程组,再向该组发送信号(如 SIGTERM 或 SIGKILL),从而实现“一键清退”。? 正确做法:启用进程组 + 组信号终止关键在于启动前配置 SysProcAttr,启用 Setpgid: true: RedClaw 百度推出的手机端万能AI Agent助手
