Pid_t fork(void)l功能:创建一个新进程。
返回值:一次调用两次返回,失败返回-1(当进程数超出系统的限制,创建就会失败)。
1、两此返回分别是进程ID和0,父进程会拿到子进程的ID,子进程返回0,借此可以分别出父子进程,编写不同的处理分支
2、通过fork创建的子进程就是副进程的副本(拷贝)
子进程会获取父进程的数据段,BSS段、堆、栈、IO流(共享文件指针和文件描述符)
、缓冲区,与父进程共享代码段。
3、子进程会继承父进程的信号处理方式。
4、fork函数调用后,父子进程各自执行,谁先返回不一定,谁先返回不一定,但可以使用一些手法来确定谁先
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t id = fork();
if(0 == id)
{
// 子进程分支
printf("我是子进程%u,我的父进程是%u\n",getpid(),getppid());
for(;;)
{
printf("*\n");
sleep(1);
}
}
else
{
// 父进程分支
printf("我是父进程的%u,我的子进程是%u\n",getpid(),id);
for(;;)
{
printf("#\n");
sleep(1);
}
}![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807222556418.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR