简要说明fork创建父子进程、orphan孤儿进程、defunct僵尸进程;wait、waitpid使用;gdaemon创建守护进程;亲缘关系的进程使用无名管道;
1.fork进程创建
system、fork、execl、open均可以创建进程,这里主要介绍fork方式。
fork创建父子进程查看父进程、子进程的堆栈区情况。
写时复制:copy on write 子进程对于变量的修改不影响父进程的堆栈区。因为这些共享的区域被内核设定为只读。
//注释:malloc申请空间处于堆区;变量处于栈区
//局部变量在栈区
#include"func.h"
int main(){
pid_t pid;
pid=fork();
int i=10;
if(pid==0){
printf("child mypid=%d myppid=%d\n",getpid(),getppid());
i=5;
printf("child i=%d &i=%x\n",i,(unsigned int)&i);
return 0;
}else{
//父进程返回子进程pid
printf("parent mychild=%d mypid=%d\n",pid,getpid());
sleep(3);
printf("parent i=%d &i=%x\n",i,(unsigned int)&i);
return 0;
}
}
//malloc申请空间在堆区
#include"func.h"
int main(){
pid_t pid;
char* p=malloc(20*size