关于fork的小问题

C、C++和Java语言
回复
free23king
帖子: 1
注册时间: 2010-12-10 19:43
送出感谢: 0
接收感谢: 0

关于fork的小问题

#1

帖子 free23king » 2010-12-10 20:19

我还只是个菜鸟
求各位大大指导

其实还是关于fork() 的问题

题目的要求是请你用fork()创建子进程的方法
创建尽可能多的子进程,并显示进程数

这是我之前的代码,希望各位能指导下

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

int i = 0;
int main() {
int pid = fork();
while(pid == 0){
i ++;
printf("我是第 %d 个子进程,我的进程id是 %d\n", i, getpid());
pid = fork();
}
if(pid == -1){
printf("捕获异常,此时已经新建了 %d 个子进程\n", i);
exit(1);
}
else if(pid > 0){
//printf("我是父进程,我的进程id是 %d\n", getpid());
}
return 0;
}
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45
送出感谢: 0
接收感谢: 9 次

Re: 关于fork的小问题

#2

帖子 fanhe » 2010-12-12 21:04

其实我也不熟,估计是要用到原子把全局计数器操作加法

你自己参考《linux 系统编程》这本书吧,说得挺详细的,网上有中文的pdf,非常好用
头像
thelover
帖子: 47
注册时间: 2008-09-03 16:16
来自: 江湖
送出感谢: 3 次
接收感谢: 0
联系:

Re: 关于fork的小问题

#3

帖子 thelover » 2010-12-14 14:38

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

int main(void)
{
int pid, i = 0;
while(1){
pid = fork();
i++;
if(pid == 0)
break;
sleep(1);
}

printf("第 %d 个子进程,进程id是 %d\n", i, getpid());
return 0;
}

/*如果想让子进程不退出printf后加while(1),想速度加快去掉sleep*/
头像
thelover
帖子: 47
注册时间: 2008-09-03 16:16
来自: 江湖
送出感谢: 3 次
接收感谢: 0
联系:

Re: 关于fork的小问题

#4

帖子 thelover » 2010-12-14 14:39

代码: 全选

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

int main(void)
{
	int pid, i = 0;
	while(1){
		pid = fork();
		i++;
		if(pid == 0)
			break;
		sleep(1);
	}

	printf("第 %d 个子进程,进程id是 %d\n", i, getpid());
	return 0;
}
看你那个全局变量就知道你没理解进程之间的关系!
头像
thelover
帖子: 47
注册时间: 2008-09-03 16:16
来自: 江湖
送出感谢: 3 次
接收感谢: 0
联系:

Re: 关于fork的小问题

#5

帖子 thelover » 2010-12-14 14:42

UNIX下编程!只需要看一本书APUE

不看个4,5遍不能说看懂了!
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45
送出感谢: 0
接收感谢: 9 次

Re: 关于fork的小问题

#6

帖子 fanhe » 2010-12-15 20:32

进程之间通讯是ipc问题,请查阅unix网络编程第二卷
回复

回到 “C/C++/Java”