环境变量与进程详解


1.进程的优先级

在这里插入图片描述

1.1 查看优先级

在这里插入图片描述

1.2 调制优先级

在这里插入图片描述
虽然有这种功能,但是我严格不建议大家调整优先级!!!!!!!!!!!!!

2.环境变量

2.1 命令行参数

main中有时候带参数,有时候不带参数,那么这个参数到底是什么?
在这里插入图片描述

在这里插入图片描述
到这里,linux中的命令,其实都是可执行程序!!!

2.2 环境变量

我们可以发现,平时的linux命令ls,pwd这些可以直接运行
而我们自己编译完成的可执行程序得./a.out才可以运行,为什么不可以直接像ls那些一样直接运行呢?????
在这里插入图片描述
想要和ls命令一样直接运行怎么办??
在这里插入图片描述
但是要注意添加环境变量是由讲究的:
在这里插入图片描述
其他的环境变量:
在这里插入图片描述
利用代码看环境变量:
在这里插入图片描述
获取环境变量的方法:
在这里插入图片描述

3.程序的地址空间

在这里插入图片描述

3.1 为什么要有地址空间?

在这里插入图片描述

3.2 linux的大O(1)调度算法

在这里插入图片描述

4.进程创建

#include <unistd.h>
pid_t fork(void);

返回值:自进程中返回0,父进程返回子进程id,出错返回-1
在这里插入图片描述

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。
在这里插入图片描述

创建进程也是有可能失败的,原因有:
①系统中有太多的进程
②实际用户的进程数超过了限制

5.进程中止

5.1 进程的退出码(错误码)

在这里插入图片描述
代码跑完,结果正确。
代码跑完,结果不正确。
可以通过进程的退出码绝对!

还有一个情况:
代码出异常了,没跑完,提前结束!
操作系统发现了你做了不该做的使其,操作系统就会杀死进程!
一旦出现异常,退出码就没有意义了!
在这里插入图片描述

5.2 进程终止的最优写法!

在这里插入图片描述

5.3 进程终止的三种方法

在这里插入图片描述

6.进程等待

等待有阻塞等待和非阻塞等待。
阻塞等待就是父进程等子进程的时候什么也不做。
非阻塞等待就是父进程等待子进程的时候可以做其他事情!

进程等待有两个很重要的函数,wait和waitpid
在这里插入图片描述
等待的时候是会解决子进程的僵尸问题的!
在这里插入图片描述

6.1 wait

pid_t wait(int*status);
返回值:
成功返回被等待进程pid,失败返回-1。
参数:
输出型参数,获取子进程退出状态,不关心则可以设置成为NULL

6.2 waitpid

pid_ t waitpid(pid_t pid, int *status, int options);
返回值:
当正常返回的时候waitpid返回收集到的子进程的进程ID;即id就是fork的返回值
如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;
参数:
pid:
①Pid=-1,等待任一个子进程。与wait等效。 即pid=-1,则表示等待任意一个子进程退出。
②Pid>0.等待其进程ID与pid相等的子进程。 即pid>0,则表示等待制定的子进程退出。

status:
WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)也就是查终止信号是否为0.
WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)也就是查退出码是否为0。

options:
options的值若为0,那么就是阻塞等待。父进程什么也不做,就等子进程啥时候结束!
宏(WNOHANG):非阻塞等待, 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进 程的ID。

6.3 获取退出信息和退出码

这是一种比较僵硬的写法:
在这里插入图片描述
更好的写法利用WEXITSTATUS:
在这里插入图片描述

6.4 非阻塞轮询

在这里插入图片描述

7.进程程序替换

7.1 进程替换现象和原理

在这里插入图片描述

7.2 多进程的程序替换

在这里插入图片描述

7.3 关于常用的进程替换的函数

在这里插入图片描述
在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 23:02:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 23:02:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 23:02:03       82 阅读
  4. Python语言-面向对象

    2024-03-26 23:02:03       91 阅读

热门阅读

  1. vue的setup语法糖?

    2024-03-26 23:02:03       39 阅读
  2. 【半结构化访谈法】

    2024-03-26 23:02:03       36 阅读
  3. 24.Python从入门到精通—函数 标准模块 包

    2024-03-26 23:02:03       40 阅读
  4. 【STM32学习计划】

    2024-03-26 23:02:03       37 阅读
  5. 状态机实现单词统计

    2024-03-26 23:02:03       38 阅读
  6. 探索编程语言的发展历程

    2024-03-26 23:02:03       49 阅读
  7. 基于Springboot的个人博客系统的设计与实现

    2024-03-26 23:02:03       28 阅读
  8. C++ 如何去认识模板

    2024-03-26 23:02:03       38 阅读