fork复制进程
1.shell:
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

我们就是通过命令解释器(称为shell)(bash是命令解释器中的一种)和内核和系统进行交互的(Windows通过图形界面进行交互的);例如我们把ls交给bash,bash帮我们运行ls,然后把结果给用户;

2.fork如何复制进程?
fork是把已有的进程复制一份,当然把PCB也复制了一份,然后申请一个PID,子进程的PID=父进程的PID+1;

如果父子进程想要做不同的事情,那么我们通过返回值来判断;
man fork
3.代码如下:
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>
int main()
{
char *s=NULL;
int n=0;//控制父子进程执行的次数;
pid_t id=fork();
assert(id!=-1);
if(id==0)//子进程
{
s="child";
n=3;
}
else//父进程
{
s="parent";
n=7;
}
//父子进程
int i=0;
for(;i<n;i++)
{
printf("s=%s\n",s);
sleep(1);
}
exit(0);
}
父子进程是两个独立的进程,各自执行各自的代码;如果父子进程要做不一样的事情,就通过if else返回值来操作;
4.fork的时机
fork产生的这个子进程不是从头开始执行的,而是从fork之后开始执行的,就是说fork下面的代码子进程才开始执行,具体的是说从返回值这里子进程开始执行,子进程不会再fork了,所以不会出现子进程再去fork产生一个子进程的问题.
也就是说:从返回值这里开始,父进程返回子进程的PID,子进程返回0;
5.getppid与getpid
getppid:得到一个进程的父进程的PID;
getpid:得到当前进程的PID;
man getpid;
man getppid
6.补充

「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!
更多推荐



所有评论(0)