关于unix 系统调用fork()小结

  上周自习的时间我看了看一些,系统调用的博客。正好《深入理解计算机》这本书也看到了这一部分,就写一点简单的个人体会。

  首先是fork函数,它是一个unix系统提供的系统接口,还有关于系统调用的补充,系统调用是通过异常(陷阱)来触发进入内核模式的,由于是在windows环境下不会调用win的系统调用,也就留着下次再linux上上代码了,但这篇随笔主要在于总结,而不是侧重于讲解函数。它的头文件是#include<unistd.h> ,作用是创建一个子进程,并且会复制出父进程的用户级的虚拟进程空间的副本,成功就会返回子进程的“pid_t”数据类型的变量 , 本质是一个int。失败返回-1,还有一个非常重要的就是在子进程哪里pid == 0 ,子进程创建后会和父进程并发执行如果不使用wait()函数就会让子进程变成僵尸进程,使用ps -ax  z状态的就是僵尸进程,这里成为僵尸进程的主要原因是因为父进程先退出如代码:(解决方法就是用wait函数,缺时间就不补了)

 1 #include<stdio.h>
 2 #include<unistd.h>
 3 #include<errno.h>
 4 #include<sys/types.h>
 5 int main(void)
 6 {    
 7             pid_t  pid   =-1;
 8             if( (pid =  fork()) <  0){
 9                 printf("fork error  : %s", strerror());   //这这博客的插入代码简直受罪
10                 exit(0);
11              }         
12               else if(pid  ==  0  ){
            printf("child!\n");
            sleep(5);
13 exit(); 14 } 15 printf("the end!"); 16 exit(0); 17 }

  由于是多进程操作系统,子进程父进程是并行的,父进程很有可能会提前退出。自然这份代码没有使用wait函数来回收子进程也会造成很多麻烦,但是他们的输出都会在同一个输出流,这是因为子进程会继承父进程的所有打开文件。先到这里,看书了(水平不够心中所想都不能正常表达)……有空再补

posted @ 2016-05-28 10:34  依旧如此  阅读(1347)  评论(0编辑  收藏  举报