免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1426 | 回复: 3
打印 上一主题 下一主题

[C] 关于进程创建的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-02 16:32 |只看该作者 |倒序浏览
#include<stdio.h>

#include<signal.h>

#include<unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

void waiting( );
void stop( int sig);
int wait_mark;



int main( )

{
        int p1,p2;

        while((p1=fork())==-1);
        if(p1==0)
        {
                wait_mark=1;
                (void) signal(16,stop);
                waiting();
                lockf(stdout,1,0);
                printf("Child process1 is killed by parent!");
                lockf(stdout,0,0);
                exit(0);
        }
        else
        {
                while ((p2=fork())==-1);
                if (p2==0)
                {
                        wait_mark=1;
                        (void) signal(17,stop);
                        waiting();
                        lockf(stdout,1,0);
                        printf("Child process1 is killed by parent!");
                        lockf(stdout,0,0);
                        exit(0);
                }
                else
                {
                        wait_mark=1;
                        (void) signal(2,stop);                       

                        waiting( );                        /*等待接收ctrl+c信号*/                       

                        kill(p1,SIGUSR1);                /*向p1发出信号16*/                       

                        kill(p2,SIGUSR2);                /*向p2发出信号17*/

                        /*同步*/

                        wait(0);

                        wait(0);

                        printf("parents is killed \n");

                        exit(0);
                }       
        }

}
void stop(int sig)
{
        wait_mark=0;
}
void waiting()
{
        while(wait_mark!=0);
}
最后出来的是一按Ctrl+C程序就结束了,而且只打印出了parents is killed ,而且我查看了一下进程,发现子进程都有建立,就是没有运行,我用的是Ubunut6.06请大家帮个忙,找一下原因。

论坛徽章:
0
2 [报告]
发表于 2007-11-02 17:08 |只看该作者
也许是你的printf("Child process1 is killed by parent!");没有"\n",缓存了

论坛徽章:
0
3 [报告]
发表于 2007-11-02 17:32 |只看该作者

回复 #2 caijimin 的帖子

缓存了是什么意思呀

论坛徽章:
0
4 [报告]
发表于 2007-11-02 17:55 |只看该作者
原帖由 zenglei286 于 2007-11-2 17:32 发表
缓存了是什么意思呀

简单的说就是有一个buffer, 临时存储你printf的数据,当满足一定条件时,才会真正输出到IO口显示出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP