linux系统编程学习day2--fork()函数的使用和子进程的创建

fork()函数的使用和子进程的创建

今天就是关于进程学习应该算作最基础的一块了,学习了fork()函数的使用,然后理解了具体的进程运行的顺序还有子进程创建之后怎么让子进程进行工作,有点历史的一小步,从以往的单进程程序终于接触到了多进程的程序应该怎么写和使用,说实话,学习进程这个较为抽象的概念还是十分有趣的,特别是fork()函数的两个返回值那个点需要注意一下,思考思考。

介绍一下fork()函数:

pid_t fork(void);

pid_t就是unix定义的PID号的类型,这个返回值其实有两个地方进行接收,一个在父进程,一个在子进程,父进程接收到的返回值是创建的子进程的进程号,然后子进程收到的是这个函数返回的0.

返回值有两个:一个进程变成两个进程 ---> 各自对fork做返回。
 1.返回子进程的pid(返回值大于零)(父进程)
 2.返回0     (子进程)


而且fork函数运行后,将会将后面的代码进行一个类似拷贝的处理然后给子进程,等于从fork()处中断然后打开另一个程序一起运行剩下的代码部分,剩余代码部分就是父子进程都在跑,大致如我下面画的图所示:

创建单个子进程是特别简单的,这里附上我的一个小Demo可以参考一下:

https://github.com/SikeC/linux-study/issues/1

sleep()的使用可以让shell提示不错误,循环创建子进程的时候就类似于一个树状结构,运行时,程序会将未执行完的循环拷贝到子进程进行执行,如果子进程里面又fork()那么还将继续向下创建进程,直到结束为止,所以需要在子进程的判断里面加上退出循环语句,让它不再创建子进程。

循环创建的时候需要注意的是,进程间的CPU是随机的进行争抢,所以如果不加sleep()去规范一下的话可以看出他们显示的顺序是不一样的

贴一个简单的demo:

https://github.com/SikeC/linux-study/issues/2


其余还未遇到需要注意的点,但是感觉fork还是不方便,毕竟最后子进程执行完判断语句之后还会回到和主进程执行一段一样的代码,除非fork之后就判断然后结束之后就是一个程序的终止之类的,不然子进程的结束感觉有点多余,不知道以后会不会可以处理掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值