Linux多进程03-进程创建

一个进程创建了新的进程, 这个新进程即为子进程,子进程还可以再创建子进程,形成进程数结构

fork函数

#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);
    作用: 用于创建子进程
    返回:
        返回两次,一次在父进程中,一次在子进程中
        父进程中返回创建的子进程ID,子进程中返回0,通过fork的返回值区分父进程和子进程
        
        在父进程中返回-1,表示创建子进程失败,并且设置errno

失败的两个主要原因:
		1. 当前系统的进程数已经达到了系统规定的上限,这时 errno 的值被设置为 EAGAIN
		2. 系统内存不足,这时 errno 的值被设置为 ENOMEM


示例代码:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char const *argv[])
{
    //创建子进程
    pid_t pid = fork();

    //判断是父进程还是子进程
    if (pid > 0)
    {
        printf("pid: %d\n", pid);
        printf("i am a parent process, pid: %d, ppid: %d\n", getpid(), getppid());
    }
    else if (pid == 0)
        printf("i am a child process, pid: %d, ppid: %d\n", getpid(), getppid());

    for (int i = 0; i < 3; i++)
    {
        printf("i : %d, pid: %d\n", i+1,getpid());
        sleep(1);
    }

    return 0;
}

运行

pid: 4935
i am a parent process, pid: 4934, ppid: 4915
i : 1, pid: 4934
i am a child process, pid: 4935, ppid: 4934
i : 1, pid: 4935
i : 2, pid: 4934
i : 2, pid: 4935
i : 3, pid: 4934
i : 3, pid: 4935
posted @ 2023-05-17 18:34  言叶以上  阅读(8)  评论(0编辑  收藏  举报