PostgreSQL在Windows系统下的信号处理都是怎样的
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章将为大家详细讲解有关PostgreSQL在Windows系统下的信号处理都是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Postgre
千家信息网最后更新 2024年12月13日PostgreSQL在Windows系统下的信号处理都是怎样的
这篇文章将为大家详细讲解有关PostgreSQL在Windows系统下的信号处理都是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
PostgreSQL在Windows下的信号处理,其实只能说是模拟或者代码封装,调用的时候看起来也是 pgsignal
函数,实现了代码的跨平台,但在实现上完全跟信号无关,毕竟Windows也没有这个特性。
1、PostgreSQL的Windows代码在函数 save_backend_variables
中:
#ifdef WIN32 param->PostmasterHandle = PostmasterHandle; if (!write_duplicated_handle(¶m->initial_signal_pipe, pgwin32_create_signal_listener(childPid), childProcess)) return false;#else
下边分别讲这里的两个函数,用到的API可以自行查阅微软文档。
2、创建命名管道
函数 pgwin32_create_signal_listener
的作用是创建一个命名管道
snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", (int) pid); pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL);
3、复制管道句柄
函数 write_duplicated_handle
中:
if (!DuplicateHandle(GetCurrentProcess(), src, childProcess, &hChild, 0, TRUE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS))
这个复制的句柄通过 param
传递给新创建的后端进程。
4、Windows下的信号函数
pqsigfuncpqsignal(int signum, pqsigfunc handler){ pqsigfunc prevfunc; if (signum >= PG_SIGNAL_COUNT || signum < 0) return SIG_ERR; prevfunc = pg_signal_array[signum]; pg_signal_array[signum] = handler; return prevfunc;}
这里有一个信号处理函数数组,pqsignal
的作用是记录下这是处理哪个信号的函数。
5、Windows下的 kill
函数
#define kill(pid,sig) pgkill(pid,sig)extern int pgkill(int pid, int sig);
在 pgkill
里,使用上边创建的命名管道
snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", pid); if (CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
将信号写入管道,例如 SIGHUP。
6、信号处理线程
在启动时,创建一个专门处理命名管道事件的线程:
/* Create thread for handling signals */ signal_thread_handle = CreateThread(NULL, 0, pg_signal_thread, NULL, 0, NULL);
7、后端进程的信号处理
函数 pg_signal_dispatch_thread
里(src/backend/port/win32/signal.c
):
/* Create thread for handling signals */ signal_thread_handle = CreateThread(NULL, 0, pg_signal_thread, NULL, 0, NULL);... pg_queue_signal(sigNum);
关于PostgreSQL在Windows系统下的信号处理都是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
信号
函数
处理
信号处理
管道
代码
系统
作用
内容
句柄
文章
更多
知识
篇文章
线程
进程
不错
上边
两个
事件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
以太网模块数据库无效
慕课计算机网络技术有限公司
谁有网络技术应用PDF
有没有外文搜索数据库推荐的
校园网络安全活动方案
软件开发软件域名费会计科目
局长讲网络安全宣传周
舆情分析与网络安全
岑溪租房软件开发
全数据库加密技术
服务器不在中国
网络技术通信方式有哪几种
b端软件开发和c端的区别
唐明旭 网络安全
分析电脑软件开发的原理
导航api和数据库对接
巴州区网络安全宣传
长春服务器价格
衡水企诺网络技术
穿越火线的服务器人数
宜安科技工业互联网
开源软件开发所有权
北海网络技术
泰安ios软件开发外包公司
重庆学校卫星授时服务器云主机
游戏pvp服务器
华为造服务器吗
HCNA网络技术实验报告
软件开发求取意向都有什么
网络技术应用选修三学生分析