Linxu学习(5)输出缓冲区问题、主函数参数与进程的复制

本章学习内容

1.输出缓冲区问题(也叫printf函数输出问题)

2.主函数参数

3.进程的复制fork及相关概念(父进程 子进程 孤儿进程 僵死进程、写时拷贝)

一、输出缓冲区问题

我们要先了解,一个程序执行时输出数据是先存放到缓冲区,最后一起显示到屏幕上

数据打印到屏幕三种情况

(1)缓冲区满

(2)强制刷新缓冲区(“\n”和fflush)

(3)程序运行完毕

main1函数

执行完上述函数结果如下,由于是图片缘故,不能显示输出过程,所以这儿我口述,输出过程:在程序运行后 ,我们等待了三秒,屏幕上才显示出“Hello,World”我们需要的结果,所以说明该程序是运行完毕后将结果打印到屏幕上

main2函数

执行完上述函数结果如下, 在程序运行后 ,屏幕上直接显示出“Hello,World”我们需要的结果,但后边的条框还在闪,等待三秒控制面板下一行才自动弹出,证明此时程序才执行完毕,说明该程序是通过强制刷新缓冲区(“\n”或“fflush”)先将数据传送到屏幕上,再继续执行

 

所以综上我们可以得出结论 “\n”与fflush强刷缓冲区

二、 主函数参数(主函数参数包括参数个数、参数内容、环境变量)

首先我们要了解,在我们执行C代码时,主函数main()中也是包含参数的,只不过我们平时使用不到所有()内的值从未填写过

main函数如下

 代码结果如下

  

“hello”和“123”是传递给主函数的参数 ,下方为部分环境变量

总结:参数个数从main开始为第一个参数 ,主函数参数包括参数个数、参数内容、环境变量

三、复制进程fork及相关内容

1.fork的用法

main函数代码如下:

结果如下:

 这样我们可以清晰的看出因为fork复制了进程,父进程输出的为“partant”,子进程输出为“child”

2.父进程和子进程、父子进程的返回值、孤儿进程、僵死进程、写时拷贝

(1)父进程和子进程

fork复制新的进程后,新产生的进程称作子进程,原先的进程叫做父进程

(2)父子进程的返回值(getpid)

fork后父子进程一模一样但返回值不同 子进程返回值为0  父进程返回值是子进程id号

main函数,只需将fork用法的呼出结果修改,添加pid号获取

结果如下: 

(3)孤儿进程

父进先程结束,子进程会变成孤儿进程,系统会重新分配父进程

(4)僵死进程(defunct)

子进程先结束,父进程未获取退出码(调用wait获取退出码),子进程就会变成僵死进程

上图中defunct所标识的就为僵死进程 (在后台运行main.c程序,页面输入ps会显示上图)

(5)写时拷贝

fork()复制内存页面时,如果父子进程页面中内容没发生改变,他两共享一份页面,如果要子进程的页面中内容时,需要将原先父进程的内容拷贝一份给子进程,让其修改

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值