进程创建

fork进程创建

  • 创建子进程,会复制当前的父进程
  • 子进程和父进程运行在分开的内存空间,但是在fork()时两者有相同的内容
fork:用于创建子进程
    #include <sys/types.h>
    #include <unistd.h>

    pid_t fork(void);
    作用:用于创建子进程
    返回值(pid_t):
        fork的返回值会返回两次。一次是在父进程中,一次是在子进程中。
        在父进程中,返回创建的子进程的ID
        在子进程中,返回0
        如何区分父进程和子进程:通过fork的返回值(父进程>0)
        在父进程中返回-1,表示创建子进程失败,并且设置errno
		
    getpid():获取当前进程的ID
    getppid():获取父进程的ID

父子进程虚拟地址空间情况

  • fork后产生的子进程用户区数据和父进程用户去数据一样
  • 内核区除了PID号不一样,其他都一样
  • 子进程的栈空间也会有pid(局部变量),但是pid=0
  • 写时拷贝:在写时才会复制地址空间。内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。
posted @ 2023-02-08 20:15  小秦同学在上学  阅读(13)  评论(0编辑  收藏  举报