我还是第一次见用信号来控制pprof.之前都是开一个端口,需要时去请求
kill -1 是什么意思
kill -1 的意思是向一个进程发送 SIGUSR1 信号。
SIGUSR1 信号是一个用户定义信号,默认情况下不会对进程产生任何影响。但是进程可以选择去处理这个信号,做一些自定义的操作。
kill -1 的一些主要特点和功能:
SIGUSR1 信号编号是10,所以 kill -1 相当于
kill -SIGUSR1发送这个信号不会终止进程,仅仅提示进程它收到了这个信号。
进程可以设置信号处理函数,来响应和处理收到的 SIGUSR1 信号。
常用来提示进程做一些工作,例如打印日志,读取配置等。
与终止信号如 SIGKILL、SIGTERM 不同,进程可以选择忽略这个信号。
一些服务进程如 Nginx、MySQL 都支持 SIGUSR1 信号来重新打开日志或者其他定期任务。
所以总体来说,kill -1 是一个很轻量级的操作,仅仅提示进程发生了某个事件,不会termination进程。它常用在进程间通信或触发内部工作流程等场景。而不像SIGTERM那样直接强制结束进程。
1 | func signalHandle() { |
这段代码的作用是注册并监听 Unix 系统信号,来处理服务的关闭和重启操作。
具体分析:
使用 signal.Notify 函数注册信号通道 ch,监听常见的一些系统信号。
循环读取信号通道 ch,根据不同信号类型进行处理:
SIGQUIT、SIGTERM、SIGINT 等退出信号,直接返回结束进程。
SIGHUP 信号,启动 pprof 性能分析。
SIGABRT 信号,结束 pprof 分析。
- 其他未处理的信号直接返回。
通过这个信号处理函数,可以实现:
接收 Unix 信号优雅地关闭服务进程。
用 SIGHUP 信号实现服务热重启,启动性能分析程序。
用 SIGABRT 信号停止性能分析程序。
所以总的来说,这个函数实现了基于信号的服务控制逻辑:监听信号并执行对应操作,比如重启、退出、性能分析等。这对于后台运行的服务进程来说是一个很常见的功能。
https://cloud.tencent.com/developer/article/1645996
https://colobu.com/2015/10/09/Linux-Signals/
https://superuser.com/questions/1075379/send-sigterm-with-command-line-shortcut
http://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter16/16.03.html
- Ctrl-C 发送 INT signal (SIGINT),通常导致进程结束
- Ctrl-Z 发送 TSTP signal (SIGTSTP); 通常导致进程挂起(suspend)
- Ctrl-\ 发送 QUIT signal (SIGQUIT); 通常导致进程结束 和 dump core.
- Ctrl-T (不是所有的UNIX都支持) 发送INFO signal (SIGINFO); 导致操作系统显示此运行命令的信息
taskon-server代码里面,用这个控制是否开启pprof监控
原文链接: https://dashen.tech/2023/06/02/Go信号监听/
版权声明: 转载请注明出处.