进程创建fork与vfork,孤儿进程,僵尸进程

来源:互联网 发布:2皇冠淘宝店铺转让 编辑:程序博客网 时间:2024/05/19 19:41
# include <stdio.h># include <sys/types.h># include <unistd.h># include <stdio.h>int main(void){pid_t pid;if (-1 == (pid = fork())) {perror("fork");return -1;}else if(0 == pid) //创建了一个子进程,该子进程几乎拷贝了父进程的全部内容,单两个进程中的变量互不硬性//孤儿进程  一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(    进程号为1)所收养,并由init进程对它们完成状态收集工作。//僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程{   printf("child process, return value is %d, PID is %d, PPID is %d\n", pid, getpid(), getppid());}else{   printf("parent process, return value is %d, PID is %d, PPID is %d\n", pid, getpid(), getppid());}return 0;}
1.  fork  ():子进程拷贝父进程的数据段,代码段 
    vfork ( ):子进程与父进程共享数据段 
2.  fork ()父子进程的执行次序不确定 
    vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec
     或exit 之后父进程才可能被调度运行。 
3.  vfork ()保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。如果在
   调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

0 0
原创粉丝点击