在某些项目中,当进程被kill杀死时候,运行程序需要处理一下逻辑,比如:用户信息回写到数据库,记录一些累计变化量到文件里等。
go代码:
#创建一个管道,用于接受监听的信息
signalChan := make(chan os.Signal, 1);
#启动一个协程用于监听到消息后的逻辑
go func() {
ss:=<-signalChan;
fmt.Println(" 监听到了退出 ====> ",ss.String());
os.Exit(0);
}();
#监听SIGINT ,SIGTERM 消息
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
jav代码:
#启动监听退出消息
Runtime.getRuntime().addShutdownHook(new KillCodeWorkerThread());
#收到退出消息逻辑
public class KillCodeWorkerThread extends Thread {
@Override
public void run() {
System.out.println("收到关闭信号");
}
}
注意:Runtime.getRuntime().addShutdownHook()的实现类一定要是一个线程。第二:ShutdownHook是并发执行的,可以同时出发多个,注意实际逻辑释放需要锁。
c++代码:
#退出运行方法
void signalHandler( int signum )
{
cout << " 监听到了退出 \n";
// 清理并关闭
exit(signum);
}
#注册信号 SIGINT 和信号处理程序
signal(SIGINT, signalHandler);
本文暂时没有评论,来添加一个吧(●'◡'●)