日期:2014-05-16  浏览次数:20652 次

linux c的进程操作
1. 一个父进程可以同时fork多个子进程比如1000个进程;
2. 父进程和子进程分别执行的不同的函数;但是所有的子进程执行的是同一个函数;
比如:父进程调用函数为parent()
  子进程调用函数为 children()
3. 子进程每隔1秒对对一个全局数组进行操作一次
4. 进过了100秒后父进程通过调用parent()将全局数组里的值给打印出来,同时关闭所有子进程
  如果大家写过类似的程序,其实关键问题主要存在于以下几点:
  1.父进程,子进程如何分别调用不同的函数执行
  2.父进程,子进程如何使用程序的共享变量,数组
  3.父进程终止器所有的子进程
如果有谁写过类似的程序,请给个参考例子,本人不胜感激!

------解决方案--------------------
楼主首先应该弄明白的是:
1. 某子进程操作全局数组, 操作的是"自己"的"全局数组", 不影响的其他子进程或父进程的"全局数组".
2. 父进程,子进程如何使用程序的共享变量,数组的方法是"共享内存区"

楼主先找一本Unix编程的书, 看看进程的部分和共享内存的部分, 一切都会明白了.
google一下: Unix 进程 共享内存
能找到很多,很多.
------解决方案--------------------
没错,只有线程才要考虑如何对全局变量的读写问题
线程:create_pthead()
------解决方案--------------------
线程:http://baike.baidu.com/view/400319.htm
 #include <stdio.h>
#include <pthread.h>
void thread(void)
{
int i;
for(i=0;i<3;i++)
printf("This is a pthread.\n");
}

int main(void)
{
pthread_t id;
int i,ret;
ret=pthread_create(&id,NULL,(void *) thread,NULL);
if(ret!=0){
printf ("Create pthread error!\n");
exit (1);
}
for(i=0;i<3;i++)
printf("This is the main process.\n");
pthread_join(id,NULL);
return (0);


进程:http://linux.chinaunix.net/doc/program/2001-08-21/643.shtml
void main(){
int i;
if ( fork() == 0 ) {
/* 子进程程序 */
for ( i = 1; i < 1000; i ++ )
printf("This is child process\n");
}
else {
/* 父进程程序*/
for ( i = 1; i < 1000; i ++ )
printf("This is process process\n");
}


最好自己去baidu
------解决方案--------------------
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
if((pid=fork())==0)
{
printf("I am in child process\n");
}
if(pid<0)
{
printf("fail to create process\n");
}
else
printf("in parent process\n");
return 0;
}

运行结果:
I am in child process
in parent process
in parent process
为什么执行了两遍in parent process,难道子进程生命期不是其所在的
{},子进程执行完后为什么还执行父进程的代码? 立珊网络计算机专业网

回答:
www.koogoogle.cn

简单的说,自 fork 调用之后的代码,父子进程均是可见的
你的程序里面,子进程在执行了 "i am in child" 之后,也做了一次
if < 0 ... else "in parent"
所以打了两遍

正确的写法应该是

pid = fork();
if (pid < 0) {
// 异常处理
}
if (0 == pid) {
// 父进程
} else {
// 子进程
}

对比一下就明白了