- 论坛徽章:
- 0
|
如下代码
#include <string.h>
#include <stdlib.h>
//static int mclock = 1;
typedef struct {
int mclock;
} DEF;
DEF adef;
int mclock = 1;
void sigroutine(int signo)
{
switch (signo)
{
case SIGALRM:
adef.mclock = 1;
mclock = 1;
printf("catch a SIGALRM\n");
break;
}
}
int main()
{
int maxproc = 5;
pid_t pid;
for(int i = 1; i <= maxproc; i++)
{
pid = fork();
if( pid < 0 )
{
return -1;
}
else if( pid > 0 )
{
continue;
}
else
{
adef.mclock = 1;
int life = 20;
while(1)
{
if ( 1 == adef.mclock)
{
printf("alarm at 5s reached!\n");
adef.mclock = 0;
signal(SIGALRM,sigroutine);
alarm(1);
}
else
{
printf("why is the alarm late?\n");
sleep (5);
}
life -= 1;
if(life < 0)
{
exit(0);
}
}
}
}
sleep(10);
return 0;
}
|
可以输出 catch a SIGALRM 这句话,同样的代码扔到一个pc程序里就好象没有发出SIGALRM 或是没有捕获.
会是编译选项或者别的什么问题吗?搞了一天了,谢谢高人指点
看有的地方说是sleep 和alarm用的一个计数器,但是上面的代码就有catch a SIGALRM 输出.
忘了说了:HP_UX B.11.11(不知道版本是不是这个东西?)
[ 本帖最后由 月波无漾 于 2007-8-14 09:25 编辑 ] |
|