package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
var (
globalVariable int // 全局变量
sigUSR1 = syscall.Signal(0xa) // SIGUSR1在不同平台的值可能不同,需要根据实际情况调整
)
// 后台运行的goroutine
func backgroundTask() {
for {
// 更新全局变量的值
globalVariable++
// 等待一段时间,模拟程序在后台运行
time.Sleep(time.Second)
}
}
func main() {
// 启动后台任务
go backgroundTask()
// 监听信号
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, sigUSR1)
// 处理信号
for {
select {
case sig := <-sigChan:
if sig == sigUSR1 {
// 收到SIGUSR1信号时打印全局变量的值
fmt.Printf("Global variable value: %d\n", globalVariable)
}
}
}
}
使用go build编译后运行
通过ps -ef|grep 程序名,能查看到进程pid
通过使用
kill -SIGUSR1 <pid>
可以触发程序打印