2021-02-27
作者:互联网
linux进程函数fork的使用
1.使用fork函数创建一个进程
pid_t fork(void);
fork 函数调用成功,返回两次
返回值为0,代表当前进程是子进程;
返回值为非负数,代表当前进程为父进程。
若调用失败,返回-1。
(1)fork() 从父进程创建了一个子进程。
(2) 会返回两次结果,(也可以这样理解:一次代码顺序执行完毕后(父进程),重新回到调用fork的那行语句,再次执行后面的程序,但此时的id已被改变(子进程))。
观察下面的3个demo,理解fork()
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
pid = getpid(); //获取自身的进程
fork(); //创建一个新的进程,fork()以后就有2个进程在跑.
printf("my pid is %d,current pro id:%d\n",pid,getpid());
//不同的两个进程输出两个不同的id;
//pid一样,但两个getpid()的结果不同,第一次为父进程,第二次为子进程
return 0;
}
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
printf("father id:%d\n",getpid());
pid = fork();
if(pid > 0)
{
printf("father progess id:%d\n",getpid());//father
}
else if(pid == 0)
{
printf("child progess id:%d\n",getpid());//child
}
//返回2个,所以if和else if 的语句都会被执行
return 0;
}
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid1;
pid_t pid2;
pid_t newpid; //
pid1 = getpid();
printf("father id:%d\n",pid1);
newpid = fork();//开辟了一个子进程,等父进程的任务执行完后,返回到这里,执行子进程.(重新执行下面的代码,但子进程的id已变)
pid2 = getpid();
printf("after id:%d\n",pid2);
if(pid1 == pid2)
{
printf("father progess id:%d\n",getpid());//father
printf("newpid:%d\n",newpid);
}
else
{
printf("child progess id:%d\n",getpid());//child
}
return 0;
}
标签:02,fork,27,pid,2021,进程,include,id,getpid 来源: https://blog.csdn.net/qq_49783511/article/details/114196256