加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

调试 – 如何获取Postgres中某些信号(例如SIGINT)的处理程序名称

发布时间:2020-12-13 16:03:45 所属栏目:百科 来源:网络整理
导读:如何在Postgres中获取处理程序的某些信号(例如SIGINT)的名称/地址?我们可以使用signal(SIGINT,my_handler)来设置信号处理程序,但是有一个函数可以告诉我们哪个函数(在这种情况下,my_handler)处理某些信号(在本例中为SIGINT)?或者我们可以找到使用GDB吗?
如何在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%lxn",oldact.sa_sigaction);

此方法将要求您修改源.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读