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