truncate函数,默认文件最大打开数,进程和程序,进程的状态转换,MMU内存管理单元,环境变量,查看进程信息,创建子进程,exec函数族,父子进程差别

1.linux下一个进程默认最多打开1024个文件

2.truncate函数:

  • int truncate(const char *path, off_t length);
  • path文件名,length长度,返回值成功返回0失败返回-1
  • 文件名必须存在,若长度大于原则拓展,反之截断
    进程和程序:
  • 什么是程序:编译好的二进制文件
  • 什么是进程:运行中的程序
  • 站在程序员角度:运行一系列指令的过程
  • 站在操作系统角度:分配资源的基本单位
  • 一个程序对应多个进程,一个进程对应多个程序
  • 程序没有生命周期,进程有生命周期

单道程序设计:每次只能运行一个程序的操作系统,很快就被淘汰了
多道程序设计:把cpu分成很多时间片,在各个程序之间切换运行。在微观上串行,在宏观上并行的设计

进程的状态转换:

在这里插入图片描述
MMU内存管理单元:

  • 1.虚拟内存地址与物理内存进行绑定 由图可以看出4-3的1g内核区在物理内存上的映射关系是同一块,因为不同进程之间要打交道。用户的数据是独立的

在这里插入图片描述
2.设置修改内存访问级别
linux一般只有两个级别,0和3用户和内核越小界别越高
在这里插入图片描述

在这里插入图片描述
获取环境变量:
getenv函数获取环境变量:

  • char *getenv(const char *name);

在这里插入图片描述
达到的作用和echo $PATH是一样的
进程pid:

  • pid_t fork(void);

返回值:

  • 失败返回-1,没有产生子进程

  • 父进程返回子进程的pid,子进程返回0

  • pid_t getpid(void);获得当亲进程的pid

  • pid_t getppid(void);获得当前进程父进程的pid

查看进程信息:
ps:

  • ps aux

  • ps ajx -----追溯进程间的血缘关系

  • kill杀死进程,实际上是给进程发送一个信号,信号就是停止进程,kill -l查看指令信息,kill -9的意思就是执行9号命令

创建n个子进程:
在这里插入图片描述
程序不退出查看效果
在这里插入图片描述
在这里插入图片描述
循环创建n个子进程控制顺序:
在这里插入图片描述
用for循环创建了五个子进程,当想让这五个子进程按顺序退出的话就应该加上控制语句sleep(i),原理是每个子进程在for循环之后的i的值都不同,那么就可以按照i的值进行顺序退出,最后再退出父进程(循环结束父进程的i为5)。
\n栓刷新行缓冲区
task_struct和mm_struct和pcb:

  • pcb在内核区

  • task_struct是进程描述符,mm_struct虚拟内存描述符,描述虚拟地址空间

  • pcb用task_struct来描述

父子进程进程共享内容:

在这里插入图片描述
exec族函数:程序替换

  • int execl( const char *path, const char *arg, …);

  • int execlp( const char *file, const char *arg, …);

  • 带p指PATH,意思就是不用指定路径直接去环境变量目录下找

  • file要执行的程序

  • arg参数列表

  • 》参数列表最后需要一个NULL最为结尾,哨兵

  • 返回值: 只有失败才返回,一般执行系统命令,ls cat
    在这里插入图片描述
    这两个函数实现的是相同的功能
    关于exec族函数的原型即基本用法举例:

在这里插入图片描述
exec函数族内部系统调用关系,我们写好的函数会被系统改变并且调用其他的函数
在这里插入图片描述
当我们执行一条命令的时候,其实是shell创建了一个子进程,然后父进程保持不变,子进程去执行命令,那具体怎么执行呢?就是调用exec族里面的execlp函数进行操作,代码在上面截图里面。
这里我们实现一下文件的替换:
在这里插入图片描述
首先从手册中知道第一个参数是待执行的程序的路径,也就是说已经编译好了就是等待执行,第二个参数就是你打算如何操作这个儿可执行程序的命令
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>