上周自习的时间我看了看一些,系统调用的博客。正好《深刻理解计算机》这本书也看到了这一部分,就写一点简单的我的体会。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函数来回收子进程也会形成不少麻烦,可是他们的输出都会在同一个输出流,这是由于子进程会继承父进程的全部打开文件。先到这里,看书了(水平不够心中所想都不能正常表达)……有空再补并发