嵌入式开发:fork() 理解

linux中,可以使用fork函数创建和当前进程一模一样的进程,叫子进程,原来的进程叫父进程

  • 函数原型
    pid_t fork(void);

    参数:无

    返回值:执行成功,子进程pid 返回给父进程,0 返回给子进程;出现错误-1,返回给父进程。执行失败的唯一情况是内存不够或者id 号用尽, 不过这种情况几乎很少发生。

例程

#include <stdio.h>
#include <unistd.h>

int main()
{
	pid_t pid;

	pid = fork();
	
	if(pid == -1)
	{
		printf("fork error!");
	}
	
	
	if(pid)
	{
		printf("I'm father\n");
		printf("father:fork num:%d ,pid is %d, ppid is %d\n",pid,getpid(),getppid());
		
	}
	else
	{
		printf("I'm child\n");
		printf("child:fork num:%d ,pid is %d, ppid is %d\n",pid,getpid(),getppid());
	}
	
	return 0;
}

开发板上运行

 

分析

  • 成功执行fork() 后,会再复制一个程序。
  • 原来的程序执行完 fork后,会返回 另一个程序的 进程号。
  • 另一个程序再次执行 fork,返回0。
  • 原来程序的 父进程 和 新程序的 父进程号 不一样。

猜你喜欢

转载自blog.csdn.net/weixin_38956024/article/details/100176133