标签:
进程创建
#include <sys/types.h> #include <unistd.h> pid_t fork(void); fork 调用2次,所以又2次返回值,父进程中返回子进程id》0 ,子进程中返回0,出错返回-1
进程实例
#include <unistd.h> #include <string.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> int main(void) { printf("now pid: %d\n",getpid()); pid_t pid; pid=fork(); int i; if(pid<0) { printf("create progress error\n"); return 1; } else if(pid ==0) { for(i=0;i<10;i++) { printf("I am son progress,pid: %d ppid: %d\n",getpid(),getppid()); i++; sleep(1); } } else { for(i=0;i<10;i++) { printf("I am father progress,pid: %d ppid: %d\n",getpid(),getppid()); i++; sleep(1); } } printf("pid: %d\n",getpid()); sleep(1); return 0; }
运行结果
now pid: 3324 I am father progress,pid: 3324 ppid: 3166 I am son progress,pid: 3325 ppid: 3324 I am father progress,pid: 3324 ppid: 3166 I am son progress,pid: 3325 ppid: 3324 I am father progress,pid: 3324 ppid: 3166 I am son progress,pid: 3325 ppid: 3324 I am father progress,pid: 3324 ppid: 3166 I am son progress,pid: 3325 ppid: 3324 I am father progress,pid: 3324 ppid: 3166 I am son progress,pid: 3325 ppid: 3324 pid: 3324 pid: 3325
可以看出父子进程是交替运行的
父子进程哪个先运行根据系统调度
子进程继承
子进程继承属性 用户信息权限,目录信息,信号信息,环境,共享存储段,资源限制,堆,栈和数据段,共享代码段 子进程特有属性 进程id,锁信息,运行时间,未决信号 操作文件的内核结构变化 子进程只继承父进程的文件描述符表,不继承单共享文件表项和i-node 父进程创建一个子进程后,文件表项的引用计数器加1变2,当父进程close操作后,计数器减1,子进程还是可以使用文件表项,只有计数器为0时才释放文件表项
只有正文段共享物理内存
静态变量,全局变量存储于正文段,局部变量存储于栈中
标签:
原文地址:http://www.cnblogs.com/peixiguang/p/5816312.html