如何创建一个进程?

子进程拷贝父进程的代码和数据,进程拥有自己的独占资源(写时拷贝),父,子进程共享代码区,不共享数据区(私有化)

当使用pid_t fork(void)创建进程时,若创建成功,给父进程返回子进程id,给子进程返回0,失败的话,-1被返回给父进程。

子进程找到父进程方法是唯一的,父进程找子进程不唯一。

猜测运行结果,会打印几条消息??

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
        int i=0;
        pid_t id;
        for(;i<2;++i)
        {
                id=fork();
                if(id==0){//child
                        printf("pid: %d,ppid: %d\n",getpid(),getppid());
                }
                else if(id>0){//father
                        printf("pid: %d,ppid: %d\n",getpid(),getppid());
                }
        }
        return 0;
}

wKioL1cHLsfgIX6AAAAnxBuClHU770.png

运行结果显示:用fork()创建子进程后执行的是和父进程相同的程序(但可能执行不同的代码分支:if条件判断分流)

后面的ppid为1显示他们变成了孤儿进程,被1号进程领养。

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
        int i=0;
        pid_t id;
        for(;i<2;++i)
        {
                id=fork();
                if(id==0){//child
                        printf("pid: %d,ppid: %d\n",getpid(),getppid());
                }
                else if(id>0){//father
                        printf("pid: %d,ppid: %d\n",getpid(),getppid());
                }
        }
        printf("pid: %dHello\n",getpid());
        return 0;
}

wKiom1cHLhnTJIPdAAAqPArGxd4865.png