进程二(进程的创建)

创建进程

创建进程的一般工作:

  • 1.分配pid
    • 0号进程是内核进程,他创建1号进程
    • 0号进程还将进程从物理内存搬到磁盘,和从磁盘搬到物理内存
  • 2.分配PCB拷贝父进程PCB的巨大多数数据
  • 3.给子进程分配资源
  • 4.复制父进程地址空间
  • 5.将子进程置为就绪状态,放入就绪队列

一system

system函数:该函数的作用是,运行义字符串参数的形式传递给他的命令并等待该命令的完成(如果无法启动shell来运行这个命令,system函数会返回错误代码127,其他错误会返回-1

 include<stdlib.h>
 int system(const char* string );

用法实例
缺点:system不是启动一个新进程的理想手段,因为他必须用一个shell来启动需要的程序,所以他对shell的安装和使用换进的依赖也很大

二 fork

fork():fork创建一个新进程,这个系统调用复制当前进程,在进程表中创建一个新的表项新表项中的许多属性与原进程一样,执行的代码也完全一样,但新进程有自己的数据空间,环境和文件描述符
fork
- pid_t fork(void)
- 返回 -1则是创建失败
- 返回 0 则是子进程
- 返回>0 则表示父进程
- kill-l查看系统支持的信号列表
- 这里写图片描述
fork的注意点:
1.父子进程交替执行
2.父进程死亡,子进程变成孤儿进程,由1号进程收养
3.子进程死亡,变为僵尸进程
Z僵尸进程
僵死状态是一个比较特殊的状态,当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回码就会产生僵死进程
僵死进程会以终止状态保持在进程表中,会一直等待父进程来读取退出码
所以只要子进程退出,父进程在运行,但是没有读取到子进程的状态,则子进程会变成Z状态
创建一个将僵尸进程
这里写图片描述 这里写图片描述
这里写图片描述
僵尸进程的危害:
会造成内存资源的浪费和内存泄漏
什么叫做内存泄漏
内存泄漏 是指由于疏忽或者错误造成程序未能释放已经不再使用的内存的情况
我们常说的内存泄漏是指堆内存的泄露,堆内存是指从堆中分配的,大小任意的,使用完必须显示释放的内存
孤儿进程
父进程先退出,子进程就会被被称为孤儿进程
孤儿进程会被1号进程领养,当然也会变1号进程回收
分析fork()创建的子程序
这里写图片描述
这里写图片描述
这里写图片描述

三 vfork

    vfork:和fork的用法一样只是他是子进程先执行(一定要用exit()不然会出错),一般不用它
    ![这里写图片描述](https://img-blog.csdn.net/20180727081747731?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNDIxNzEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
    ![这里写图片描述](https://img-blog.csdn.net/20180727081756125?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNDIxNzEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
    ![这里写图片描述](https://img-blog.csdn.net/20180727081805156?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNDIxNzEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值