今天需要学习的是父子进程相关的内容:
Fork函数:
对于fork函数我们需要使用手册来查看如何使用,fork函数能够创建一个新的进程(子进程),基于原来的进程(父进程)。
我们先看一下fork函数能带来什么:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid=getpid();
fork();
printf("my pid is %d\n",pid);
while(1);
return 0;
}
可以看到我们使用的fork函数后输出了两个结果,这就代表了有一个结果是由于fork函数创造的,这个新创建的便是子进程,但是我们如何去分辨一个子进程和父进程呢?
答案就是昨天学习的内容,每个进程都有它独特的pid,我们可以用pid来分辨他们。
我们废话不多说,来编写实战看看代码如何使用:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid=getpid();
fork();
if(pid==getpid()) //当前进程和获取的进程一致则为父进程
{
printf("this is father print,father pid=%d\n",pid);
}
else //当前进程和获取的初始进程不一致,则为子进程
{
printf("this is child print,child pid= %d\n",getpid());
}
return 0;
}
我们先来编译运行:
可以看到我们的父子进程的pid号不一致,那么我们就可以通过这种方式去判断父子进程到底是哪个了。
另外我们也可以这么表示:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid_t pid2;
pid=getpid();
printf("before fork: pid = %d\n",pid);//fork函数前pid号,即得到父进程pid
fork(); //可以理解为生了个孩子(子进程)
pid2=getpid(); //父子获取的pid不一样
if(pid==pid2)
{
printf("this is father print");
}
else
{
printf("this is child print,child pid= %d\n",getpid());
}
return 0;
}
OK,多说无益,我们来看一看运行的结果如何:
这也是一个好方式。
完成!