如何在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,$1) (gdb) print ((struct sigaction *)$1)->sa_sigaction (gdb) info sym <address from prevIoUs step>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。