文章目录
- 1.进程的优先级
- 1.1 查看优先级
- 1.2 调制优先级
- 2.环境变量
- 2.1 命令行参数
- 2.2 环境变量
- 3.程序的地址空间
- 3.1 为什么要有地址空间?
- 3.2 linux的大O(1)调度算法
- 4.进程创建
- 5.进程中止
- 5.1 进程的退出码(错误码)
- 5.2 进程终止的最优写法!
- 5.3 进程终止的三种方法
- 6.进程等待
- 6.1 wait
- 6.2 waitpid
- 6.3 获取退出信息和退出码
- 6.4 非阻塞轮询
- 7.进程程序替换
- 7.1 进程替换现象和原理
- 7.2 多进程的程序替换
- 7.3 关于常用的进程替换的函数
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 关于常用的进程替换的函数