其他分享
首页 > 其他分享> > 2021-02-27

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