#include<stdio.h> #include<stdlib.h> #include<string.h> #include<fcntl.h> #include<sys/types.h> #include<unistd.h> #include<sys/wait.h> #include<signal.h> #define err_sys(info) { fprintf(stderr,"%s: ",info); exit(EXIT_FAILURE); } int glob=6; char buf[]="a write to stdout "; 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 "); if((pid=fork())<0) { err_sys("fork error"); } else if(pid==0) { glob++; var++; } else { sleep(2); } printf("pid=%d,glob=%d,var=%d ",getpid(),glob,var); exit(0); } /* fork产生一个子进程,子进程会继承父进程很多的内容, 比如变量,和代码段。glob就是继承的变量。printf()那个语句就是继承的代码段。 fork这个函数返回两次,一次是子进程返回0,一次是父进程 返回的自进程的id,所及pid肯地你大于0 通过上面的函数,我们可以知道,子进程对变量的修改不影响福进程的变量。 就好像自进程复制了一份父进程一样。 */