Linux系统课程:
一.进程相关的概念:
- 进程状态转换
**MMU:**内存管理单元 - 虚拟内存到物理内存的映射
- 修改内存访问级别
- 用户空间映射到物理内存是独立的。
环境变量
env :查看所有的环境变量
查看某一个环境变量:
获取环境变量:
进程fork()
返回值:
- 失败-1
- 父进程返回子进程id
- 子进程返回0
pid_t getpid(void); 获得pid,进程id,或得当前进程
pid_t getppid(void); 获得当前进程父进程的id
查看进程命令:
ps aux
ps ajx --追踪进程之间的血缘关系
进程共享:
exec函数族
执行其他程序
执行程序的时候,使用PATH环境变量,执行程序可以不用加路径
int execlp(const char *file, const char arg, …/ (char *) NULL */);
执行execlp()函数后,替换了代码段,就不会再执行之前的函数内容
孤儿进程与僵尸进程:
孤儿进程:父亲挂了,子进程被init进程领养
僵尸进程:子进程挂了,父进程没有回收子进程的资源(PCB)
man ps 查看进程的状态
回收僵尸进程:杀死父进程,init领养,负责回收。
wait与waitpid函数
按照创建的顺序退出进程:
回收子进程,知道子进程的死亡原因
作用:
- 阻塞等待
- 回收子进程资源
- 查看死亡原因
pid_t wait(int *status);
status传出的参数
返回值:
-
成功返回终止的子进程ID
-
失败返回-1
判断返回值的状态:
正常死亡 WIFEXITED- 如果 WIFEXITED为真,使用WEXITSTATUS得到退出的状态 非正常死亡
WIFSIGNALED
- 如果WIFSIGNALED为真,使用得到 WTERMSIG得到信号
父子进程不共享全局变量:
waitpid()函数
回收多个子进程: