进程的创建fork()、消亡wait()

1、进程标识符pid

类型pid_t;;最多容纳三万多,16位有符号整型

ps命令

ps axf

getpid();

getppid();

2、 进程的产生

fork();

注意理解关键字:duplicating,意味着拷贝、克隆、一模一样的完整的两份代码,执行的位置也一样;

fork后的父子进程区别:

  • fork的返回值不同;
  • pid不同,ppid不同;
  • 未决信号和文件锁不继承;
  • 资源利用量清零;

init进程:1号,是所有进程的祖先进程

  • 调度器的调度策略来决定哪个进程先运行;不可猜测父子进程谁先运行;
  • fork前需要刷新缓冲区

自动刷新:加了\n当你在输出标准输出时,因为采用了行缓存,相当于自动刷新了缓冲区;

但是当你输出到/tmp/out时,则会打印两次begin。是因为fork时连带缓冲区的begin也复制给子进程了;

手动刷新:fork前加fflush(NULL);无论加没加/n,是否标准输出,都只会打印一次Begin;

 编程小题目:

  • 用200个子进程判断两百个数是否质数;

注意子进程干完活得结束子进程(exit、return);

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define LEFT 30000000
#define RIGHT 30000200

int main()
{
    int i, j, mark;
    for (i = LEFT; i <= RIGHT; i++)
    {
        mark = 1;
        for (j = 2; j < i / 2; j++)
        {
            if(i%j == 0)
            {
                mark = 0;
                break;
            }
        }
        if(mark)
            printf("%d is a primer\n",i);
        exit(0);    一定要结束子进程;
    }
    exit(0);
}
  •  谁创建谁回收;

可以把子进程看作是父进程创建的一种资源,如果父进程不结束(也不回收资源),子进程则可能变成僵尸进程;

父进程结束的子进程会变成孤儿进程,由init()管理;

僵尸进程的主要危害是占用pid资源

vfork();

  • fork()的”写时拷贝“技术:
  1. 谁写入谁拷贝;
  2. 只读时父子进程共享物理内存;

3. 进程消亡和释放资源

wait();

waitpid ();

分配算法:

  • 分块法;
  • 交叉分配算法;一般交叉算法要优于分块法;

4.exec函数

5、用户权限和组权限

6. 观摩课:解释器文件

7、 system()

8、进程会计

9、进程时间

10、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值