进程控制(fork和exit)

fork vs vfork

1.   成功调用一次,返回两个值,子进程返回0,父进程返回子进程的pid;出错返回-1

2.   头文件:

         #include <unistd.h>

         #include <sys/types.h>

3.   fork函数会拷贝父进程的数据空间、堆栈等资源,这样就会有两份数据,与父进程不相干扰。

4.   vfork函数不会拷贝父进程的资源,与父进程公用一份资源,修改数据会影响到父进程的数据一致性。

5.   使用exec切换到新的程序或者使用exit退出。

6.   当调用vfork函数去创建子进程的时候,需要使用_exit()退出,因为_exit()退出时,不会清除缓存区和关闭所有文件,若使用exit()退出则会严重影响父进程

 

Example

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

 

void main(){

         pid_t pid;

         if(fork() == 0){            //子进程中

                   printf("In child process, pid is %d\n", getpid());

                   exit(0);

         }

         else{                            //父进程中

                   printf("In parent process, pid is %d\n", getpid());

         }

 

}

 

http://baike.baidu.com/view/1952900.htm

http://baike.baidu.com/view/1745340.htm

 

 

exit()  vs  _exit()

1.      exit(0) 表示正常退出,exit(xx) xx0则为异常退出

2.      exit() 函数会直接退出程序,即便是在被调用的函数的外部函数执行;

3.      _exit() 直接使进程停止运行,清除其所使用的内存空间,并销毁其在内核中的各种数据结构,exit()在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区的内容写回文件。

 

#include <stdio.h>

#include <stdlib.h>

 

void main(){

         int i;

         for(i = 0; i < 3; i++){

                   printf("%i\n", i);

 

         }

         void func();

         func();

//      exit(0);

         printf("?????\n");             //不会被输出

}

 

void func(){

         printf("In func\n");

         exit(0);

}

 

http://baike.baidu.com/view/1542946.htm

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值