| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 383 人关注过本帖
标题:子进程没法退出为什么?
只看楼主 加入收藏
吴鹏博
Rank: 1
等 级:新手上路
帖 子:9
专家分:6
注 册:2013-9-27
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:1 
子进程没法退出为什么?
程序代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>

void fun_parent(int );
void fun_child(int );
int pid,pid_f,pid_c;

int main()
{    
    while((pid = fork())<0);
    while(1)
    {
        if(pid == 0)
        {
            pid_c = getpid();
            pid_f = getppid();
            signal(SIGINT,fun_child);
            signal(SIGQUIT,fun_child);
            signal(SIGUSR1,fun_child);
        }
        else 
        {
            signal(SIGINT,SIG_IGN);
            signal(SIGQUIT,SIG_IGN);
            pid_f = getpid();
            pid_c = pid;
            signal(SIGUSR1,fun_parent);
            signal(SIGUSR2,fun_parent);
            signal(SIGTSTP,fun_parent);
        }
    }
    return 0;
}

void fun_parent(int sign)
{
    if(sign == SIGUSR1)
    {
        printf("the bus is going!\n");
    }
    else if(sign == SIGUSR2)
    {
        printf("stop the bus\n");
    }
    else if(sign == SIGTSTP)
    {
        printf("the end!\n");
        kill(pid_c,SIGUSR1);
        wait(NULL);
        exit(0);
    }
}

void fun_child(int sign)
{
    if(sign == SIGINT)
    {
        kill(pid_f,SIGUSR1);
    }
    else if(sign == SIGQUIT)
    {
        kill(pid_f,SIGUSR2);
    }
    else if(sign == SIGUSR1)
    {
        printf("please get off the bus!\n");
        exit(0);
    }
}
2013-10-30 20:58
银行
Rank: 2
等 级:论坛游民
帖 子:7
专家分:78
注 册:2013-10-30
收藏
得分:4 
打个酱油
2013-10-30 22:02
快速回复:子进程没法退出为什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017062 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved