| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1323 人关注过本帖
标题:麻烦高手来看看我这个程序错在哪
只看楼主 加入收藏
fujian26
Rank: 1
等 级:新手上路
帖 子:131
专家分:0
注 册:2007-4-3
收藏
 问题点数:0 回复次数:5 
麻烦高手来看看我这个程序错在哪
用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child process1 is killed by parent!
Child process2 is killed by parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent process is killed!



#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void waiting( ),stop( );
int wait_mark;
main( )
{
int p1,p2,stdout;
while((p1=fork( ))= =-1); /*创建子进程p1*/
if (p1>0)
{
while((p2=fork( ))= =-1); /*创建子进程p2*/
if(p2>0)
{
wait_mark=1;
signal(SIGINT,stop); /*接收到^c信号,转stop*/
waiting( );
kill(p1,16); /*向p1发软中断信号16*/
kill(p2,17); /*向p2发软中断信号17*/
wait(0); /*同步*/
wait(0);
printf("Parent process is killed!\n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop); /*接收到软中断信号17,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 2 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop); /*接收到软中断信号16,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 1 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
}

void waiting( )
{
while(wait_mark!=0);
}

void stop( )
{
wait_mark=0;
}

、运行结果
屏幕上无反应,按下^C后,显示 Parent process is killed!

1.为何预期的结果并未显示出?
2.程序该如何修改才能得到正确结果?
3.不修改程序如何得到期望的输出?
搜索更多相关主题的帖子: 麻烦 
2008-10-30 13:21
you_me
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:251
专家分:0
注 册:2008-4-30
收藏
得分:0 
呵,对于编程我还不是高手,以后会慢慢学的。
2008-10-31 12:49
leekingui
Rank: 4
等 级:贵宾
威 望:13
帖 子:75
专家分:0
注 册:2008-10-22
收藏
得分:0 
建议单步调试试一试,很多问题尤其是没有语法错误而存在逻辑错误,很难看出来的。
2008-11-02 19:27
yaaeng
Rank: 2
等 级:新手上路
威 望:3
帖 子:24
专家分:0
注 册:2008-11-5
收藏
得分:0 
多加调试一下就行了  找出毛病分析了
2008-11-05 17:58
cuixingasd
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:54
专家分:135
注 册:2009-3-24
收藏
得分:0 
改成if(p1 == 0)   在linux下成功返回0。
2009-09-23 09:37
lwjzjw
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-11-7
收藏
得分:0 
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void waiting( ),stop( );
int wait_mark;
signal(SIGINT,stop); /*接收到^c信号,转stop*/
main( )
{
int p1,p2,stdout;
while((p1=fork( ))= =-1); /*创建子进程p1*/
if (p1>0)
{
while((p2=fork( ))= =-1); /*创建子进程p2*/
if(p2>0)
{
wait_mark=1;
waiting( );
kill(p1,16); /*向p1发软中断信号16*/
kill(p2,17); /*向p2发软中断信号17*/
wait(0); /*同步*/
wait(0);
printf("Parent process is killed!\n");
exit(0);
}
else
{
wait_mark=1;
signal(17,stop); /*接收到软中断信号17,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 2 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop); /*接收到软中断信号16,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 1 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
}

void waiting( )
{
while(wait_mark!=0);
}

void stop( )
{
wait_mark=0;
}
现在应该可以了!!
2009-11-07 22:17
快速回复:麻烦高手来看看我这个程序错在哪
数据加载中...
 
   



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

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