0
点赞
收藏
分享

微信扫一扫

Unix进程控制fork函数

萨摩斯加士奇 2022-02-16 阅读 42

头文件


 
        #include<unistd.h>/*#包含<unistd.h>*/
       
 
        #include<sys/types.h>/*#包含<sys/types.h>*/
       


函数原型
pid_t fork( void);
(pid_t 是一个 宏定义,其实质是int 被定义在# include< sys/types.h>中)
返回值: 若成功调用一次则返回两个值,子进程返回0, 父进程返回子进程ID;否则,出错返回-1
函数说明
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而 父进程中返回子进程ID。
子进程是 父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述 存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
UNIX将复制 父进程的 地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。

#include "apue.h"
 
int glob=6;
char buf[]="a write to stdout\n";
 
int main(void)
{
  int var;
  pid_t pid;
 
  var=88;
 
  if(write(STDOUT_FILENO,buf,sizeof(buf)-1)!=sizeof(buf)-1)
  {
    err_sys("write error");
  }
 
  printf("before fork\n");
 
  if((pid=fork())<0)
  {
    err_sys("fork error");
  }
  else if(pid==0)
  {
    //child
    glob++;
    var++;
  } else
  {
    printf("child pid is :%d\n",pid);
    //parent
    sleep(2);
  }
 
  printf("pid = %d,glob = %d,var = %d\n",getpid(),glob,var);
  exit(0);
}

lqx@AY140524110335068908Z:~/new_apue$ ./a.out
a write to stdout
before fork
child pid is :11626
pid = 11626,glob = 7,var = 89
pid = 11625,glob = 6,var = 88

举报

相关推荐

0 条评论