+ -
当前位置:首页 → 问答吧 → 请教一个与signal和fork有关的问题

请教一个与signal和fork有关的问题

时间:2010-07-02

来源:互联网

先贴代码:
/*****************a.c******************/
#include <stdlib.h>
#include <stdio.h>
#include <setjmp.h>

sigjmp_buf boot;

int main()
{
        pid_t  pid;

        sigsetjmp(boot, 1);
        printf("do sth.\n");

        pid = vfork();
        if (!pid)
        {
                execl("./b", NULL);
        }
        if (pid>0)
        {
                wait();
                printf("jump...\n");
                siglongjmp(boot, 1);
        }
}

/*****************b.c******************/
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

void func(int signo)
{
        printf("rcv SIGUSR1\n");
        exit(0);
}
int main()
{
        signal(SIGUSR1, func);
        while (1)
        {
                ;
        }
}

运行a, a通过fork一个进程使b运行。这时我向b发送SIGUSR1,b成功退出(至此都没有问题);而后,a由siglongjmp跳回到原入口点。——姑且称为一个周期。
期望中,之后程序的运行应该与上述的“周期”一致。
但是实际运行状况是:进程a疯狂的fork并exec进程b,fork完之后的wait()被完全无视,而直接去运行siglongjmp...
不知道是什么原因造成这种情况?

作者: SK|fisker   发布时间: 2010-07-02

,我的打印出了jump   linux amd64

作者: peidright   发布时间: 2010-07-03