《apue》信号处理程序中调用不可重入函数的疑问
问题:
1. 为什么信号处理程序只调用了一次?
2. 为什么信号处理程序中只打印了第一句“in signal handler”?
3. 处理这种异步的程序我们该怎么调试呢?
困扰我很久了,一直找不到答案,希望前辈指点迷津,在此先谢过。
我GDB调试的时候,会出现“Program terminated with signal SIGALRM, Alarm clock.”
然后就停止了,无法调试啊,怎么办?
代码如下:
#include <apue.h>
#include <pwd.h>
static void my_alarm(int signo);
int main(void)
{
struct passwd *ptr;
unsigned int timeleft;
int count = 0;
signal(SIGALRM, my_alarm);
timeleft = alarm(1);
printf("[main]timeleft = %d\n", timeleft);
while(1)
{
if((ptr = getpwnam("lpf")) == NULL)
{
err_quit("getpwname error");
}
if(strcmp("lpf", ptr->pw_name)!=0)
{
printf("return value corrupted! pw_name = %s\n", ptr->pw_name);
exit(0);
}
}
exit(0);
}
static void my_alarm(int signo)
{
struct passwd *rootptr;
printf("in signal handler\n");
if(signal(SIGALRM, my_alarm) == SIG_ERR)
{
perror("signal error");
}
if((rootptr = getpwnam("root")) == NULL)
{
err_sys("getpwname root error");
}
printf("[my_alarm] root name = %s\n", rootptr->pw_name);
alarm(1);
}