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

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

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

 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函数来回收子进程也会形成不少麻烦,可是他们的输出都会在同一个输出流,这是由于子进程会继承父进程的全部打开文件。先到这里,看书了(水平不够心中所想都不能正常表达)……有空再补并发

相关文章
相关标签/搜索