Linux :进程

1、进程的相关概念 

 

 ps -aux看到的太多了  我们想查的精确一点

 ps -aux|grep init(所有带init的)

 top: 别人看cpu的占用率 用 top

 

可以看到我们的这个进程的pid 以及cpu的占用率

 

 

 

 

2、创建进程函数fork 的使用

                                他的返回值是pid_t 

 

                同一个程序每一次的pid都是不一样的 

接着我们只是加一个fork

                      发现出来了两个结果,猜测:fork 以后创建了新进程

为了证明猜测,如下操作

                                               得出来的结果如下

         

         再猜测:fork()以后父子进程都会运行的,只是pid 不同

因为新进程的id 号肯定和原来的id号不一样

结果

都一样的

 

 结果

pid跟原来相等的话是父进程  不相等的话是子进程

 

这步 确定fork ()以后还有父进程在走

 

 

 这步看看fork()大于0 是不是父进程

 

fork()返回值大于0 进入了父进程。并且大于0的数刚好等于子进程的id 号

 

 (以前的Linux是拷贝全部的 ,现在linux是写时拷贝   ,不改动的地方直接共享)

3、fork的总结

 

这是第一个应用场景

不满足条件不创建任何进程

 

想看看里面创建的具体的ip地址,改动如下

 

ps -aux能看到现在几个进程再运行

4、vfork

 先来fork的

 父子进程都会执行,谁先执行取决于进程的调度

那么vfork 呢?

 

 一直是子进程在运行

稍微改动一下

让子进程运行三遍就让父进程运行 

                        然后我们可以打印一下变量

 

 子进程退出的时候要用好的方式退出,否则变量会被破坏掉

5、进程退出

 

 

 推荐用exit ,exit 是对_exit 和_Exit 的分装。

exit 会把进程运行的变量(缓冲区的变量)进行处理再退出。其他两个是直接退出

 

 

 这两个_exit 和_Exit运行完结果都是对的 

 但是break  可不是对的哦,破坏了变量的值

6、父进程等待子进程退出

 

                                                        代码不用改 ,直接copy 看一眼

S+表示正在运行的状态

                                          Z+就是僵尸进程

那我们把vfork 换成fork呢

                                 运行结果如下

                                        

 还是有僵尸进程,这是因为我们没对子进程的退出状态收集,所以他们会变成僵尸进程

                               这是需要用到的函数(  一般用前两个)

(里面的ppt 改成wait 使调用者阻塞) 

 

 

 

 

因为status 参数是空的话,不关心退出状态 。我们先来个空的试试,先用wait函数的。

 

3538没掉了,就不会变成僵尸进程,因为之前我们没对子进程的退出状态收集,所以他们会变成僵尸进程,所以调用wait 防止子进程变成僵尸进程

那么退出的status 的值是多少呢?我们要用到那个非空

非空: 子进程退出状态放在它所指向的地址中

不仅要等待子进程退出,还要检查她的退出状态。

假设退出的状态默认为10 

     wait 记得取地址

假设子进程退出的时候,让他的退出码为3

 

 status 的值有点怪怪的,跟我们要的3 对不上

我们怎么样才能把3真正的检测出来?

                                因为我们的子进程现在是正常退出     

                         需要用到这个宏解析他

 

改动一下

 

 这时候真正的结果子进程退出的状态码是3

(里面的ppt 改成wait 使调用者阻塞) 

options这个选项让等待子进程退yong出的时候 ,父进程不堵塞

 

 用的最多的是第二个  不堵塞

 

第一个参数Pid一般也有四个取值 ,一般用的最多的是第二个

 

 

 

父子进程一起走

 虽然父进程有调用子进程的waitpid,但是父进程马上就打印了 父进程不等待子进程退出

 

孤儿进程的代码如下:

       

 

补充:

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值