打印

fork()signal()求助

[复制链接]
365|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hughw|  楼主 | 2018-7-10 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
void myfun(int signum)
{       
        printf("received signal\n");
        return;
}
int main()
{       
        int num1,num2;
        num1=1;
        num2=1;
        pid_t key;
        key=fork();
        if(key<0)
        {
                printf("fork create fail\n");
                return 0;
        }
        pid_t ppid;
        pid_t pid;
        ppid=getppid();
        pid =getpid();
        if(key == 0)
//chlid
        {
        printf("key=%d\n",key);
//        sleep(1);
        signal(SIGUSR2,myfun);       
        while(num1<10)
                {       
                printf("target pid is %d,num1=%d\n",getpid(),num1);       
                printf("child proc wak\n");
                kill(getppid(),SIGUSR1);
                pause();
                num1++;
               
                }
//        sleep(600);
        exit(0);
        }
        if(key > 0)

        {
        printf("key=%d\n",key);

        signal(SIGUSR1,myfun);
        while(num2<10)
                {
        //        target=getpid();
                pause();       
                printf("target pid is %d,num2=%d\n",getpid(),num2);       
                printf("parent proc wak\n");
                num2++;
                kill(key,SIGUSR2);
        //        pause();
               
                }
//        exit(0);
//        sleep(6000);
        int sta;
        waitpid(key,&sta,0);
        }
        return 1;
}
程序的目的是父进程和子进程循环打1到10,但是不知道为什么大部分时候都会卡在第一次循环结束,偶尔能顺利运行完,请问这是为什么,求大神解答我的疑问

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝