繁体   English   中英

如何获取Postgres中某些信号(例如SIGINT)的处理程序名称/地址?

[英]How to get the handlers' name/address for some signals (e.g. SIGINT) in Postgres?

如何获取Postgres中某些信号(例如SIGINT)的处理程序名称/地址? 我们可以使用signal(SIGINT,my_handler)来设置信号处理程序,但是有一个函数可以告诉我们哪个函数(在这种情况下,my_handler)处理某些信号(在本例中为SIGINT)? 或者我们可以找到使用GDB吗?

您正在寻找的功能是sigaction 它需要三个参数,第一个是信号,第二个是指向新sigaction结构的指针,第三个是指向旧sigaction结构的指针(由函数填充)。 要获取当前信号处理程序,请使用第二个参数设置为NULL来调用sigaction。 例如,

struct sigaction oldact;
sigaction(SIGINT, NULL, &oldact);

printf("SIGINT handler address: 0x%lx\n", oldact.sa_sigaction);

此方法将要求您修改源。

您也可以通过gdb执行此操作,这不需要修改源代码。 例如,如果在注册信号处理程序后附加到进程,则此方法将起作用。

(gdb) call malloc(sizeof(struct sigaction))
(gdb) sigaction(SIGINT, NULL, $1)
(gdb) print ((struct sigaction *)$1)->sa_sigaction
(gdb) info sym <address from previous step>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM