当前位置: 首页 > Linux

Linux-进程创建fork()

时间:2023-04-06 03:06:19 Linux

main函数的参数argc是argv传入的参数个数:参数注意:使用for循环打印char*argv[]for循环不能直接定义inti=0;内置错误[root@localhost2020-03-19]#lsmainmain.c[root@localhost2020-03-19]#./mainargc:1argc[0]=./main[root@localhost2020-03-19]#./mainhelloworldargc:3argc[0]=./mainargc[1]=helloargc[2]=world[root@localhost2020-03-19]#./main"helloworld"argc:2argc[0]=./mainargc[1]=helloworldoutputbufferAreabufferloadstopcondition/\n遇到n时,输出buffer的所有内容注意:exit(0)和_exit(0):_exit(0)不会刷新缓冲区,直接结束进程创建fork()?fork()后,会生成一个独立的子进程。父进程fork()后,会返回子进程的pid,子进程返回0(子进程和父进程的pid!=)pid_tpid=fork();创建(复制)的子进程将跳过其fork()的创建,避免进入父子进程之间的无限循环。在PCB中查找记录一个单独的部分来记录当前节点的父进程ppid是谁,我们可以很方便的通过子进程找到父进程;所以我们可以使用tid_tgetppid();通过子id得到父id,但是我们应该如何找到父进程的子进程呢?所以子进程在返回父进程的过程中,记录下儿子的pid,方便以后找到自己的儿子。这是记录要执行哪个进程的唯一机会。子进程和父进程是两个进程,先执行哪个取决于操作系统的调度算法——并发执行父子进程两个进程之间允许运行谁就可以:父进程process会返回子进程的pid,子进程会返回0。使用这个if(pis==0)..childprocess..else..parentprocess..fork()练习例1注意事项:第二次循环,父子进程被fork复制,所以有3个A3和B。例2移除n后的buffer原值也赋值AB|i=1ABAB|i=2+AB|i=1所以会有4A4Bfor(i=0;i<2;++i){pit_tpid=fork();断言(-1!=pid);如果(pid==0){printf(“A”);}else{printf("B");}}例3所以有3个Aforks和memory引入copy-on-write技术: