父子进程---竞争

竞争
fork一个子进程以后,并不知道哪个进程先运行,怎么办?
1.用sleep?当你系统负载很重的时候,你可能sleep很长时间了,可是你想执行的进程依然没有得到执行
2.父进程希望子进程先终止,可以用wait;子进程要等父进程终止,就判断自己现在的父进程id是不是1,while(getppid()!=1) sleep(1);可是这样浪费cpu时间,也不能做到有效的竞争

解决办法:利用进程中的信号机制
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

static void charatatime( char *);

int main( void)
{
  pid_t  pid;
  TELL_WAIT();//初始化TELL,WAIT的信号机制

   if ((pid = fork()) < 0)
  {
    err_sys( "fork error");
  }
   else if (pid == 0)
  {
     WAIT_PARENT();  //等待父进程先执行
    charatatime( "output from child\n");
  }
   else
  {
    charatatime( "output from parent\n");
    TELL_CHILD(pid);   //告诉子进程可以执行了,pid为子进程id号
  }
  exit(0);
}

static void charatatime( char *str)
{
   char  *ptr;
   int    c;

  setbuf(stdout, NULL);       /* set unbuffered */
   for (ptr = str; (c = *ptr++) != 0; )
    putc(c, stdout);
}
结果:
output from parent
output from child
这样就可以自动控制父子进程的执行情况了

本文出自 “nnssll” 博客,谢绝转载!

你可能感兴趣的:(职场,休闲,TELL_WAIT)