linux中的fork函数到底做了什么事

linux中的fork函数到底做了什么事,第1张

额........每启动一个进程并不一定要执行fork.fork只是系统最后封装的一个系统调用.你在程序里不使用fork的话.使用其它方式启动进程.就不是fork.fork族里有很多函数...............exec也可替换当前进程......系统内核里生成一个进程用的是clone这个函数.

就比如要盖个房子.一个人干,要先挖土再调水泥再摆砖头再盖墙这样一步一步做.但是如果有多个人.就是可以多个人同时做这些事,一个挖土,一个调水泥.一个摆砖头.这样就省了很多时间.进程也是如此.fork的作用就是创建新进程.

这么多人一起盖房子,总不能各自盖各自的,需要大家协调来做.不能土没挖好就摆砖,没放砖就抹水泥一样.这个时候需要一个工头来管理大家.工头通过每个人的名字来指挥每个人干活.进程就通过pid来指挥一个进程干活.工人需要知道自己的工头是谁,好向他报告碰到的情况.进程需要知道自己的父进程是谁报告自己的情况.

这样就明白fork为何要返回进程的id了吧?fork是不会返回父进程的id的.

工头找了一个新工人干活.从工头知道这个新工人的名字时刻开始,新工人就会投入这个团队一起干活了.fork返回pid的时候就表示这个进程在这个进程团队里了.工头可以直接告诉工人要干什么而不会让其他工人误以为这是自己的活.但是程序并没有这么智能.这个时候就需要有一个状态(if(!pid){....这是工人干的活...})表明这个工人的代码从什么位置开始,到什么位置结束.

#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/wait.h>

int main()

{

int pipe_fds[2]

int pid

if(pipe(pipe_fds))

{

fprintf(stderr,"pipe error!\n")

return -1

}

if((pid = fork())<0)

{

fprintf(stderr, "fork error!\n")

return -1

}

if(pid == 0)

{

char buf[20] = {0}

int n,i

close(pipe_fds[1])

read(pipe_fds[0],buf,sizeof(buf))

n=atoi(buf)

for(i=1i<=ni++)

{

if(i%10 == 0)

printf("\n")

printf("%d\t",i)

}

close(pipe_fds[0])

}

else

{

int m

char bf[20] = {0}

close(pipe_fds[0])

printf("the child pid:%d\n",pid)

printf("please input number:")

scanf("%d",&m)

printf("\n")

sprintf(bf,"%d",m)

write(pipe_fds[1],bf,sizeof(bf))

wait(NULL)

printf("child complete!\n")

}

return 0

}

= OR ==

你初学者吧,请把赋值 =

和 == 值比较 搞清楚啊

= value assignment

== value compare


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7766289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存