1.进程的概念:简单来说,就是正在执行的程序。从内核的角度看,分配系统资源的实体。
2.PCB
说到进程肯定要提PCB,PCB是一种数据结构(也是C语言中的结构体),负责存储进程信息,每个进程都有自己的PCB,在fork子进程时,子进程在创建自己的PCB时,会从父进程的PCB中继承一部分信息,PCB也是对进程控制的唯一且最有效的方法。
3.PCB中的内容分类
1)标识符 :描述进程的唯一标识符,用来区别进程。如进程id
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 5 6 int main(){ 7 printf("pid:%d",getpid()); //获取当前进程id 8 printf("ppid:%d",getpppid()); //获取父进程id 9 return 0; 10 }
2)状态:进程状态,退出码...
进程状态有如下几种:R 就绪/执行;S 挂起;D 深度睡眠;T 暂停;t 跟踪;X 进程退出;Z 僵尸进程
僵尸进程出现的原因:父进程未读取子进程的退出状态。
#include <stdio.h> #include <stdlib.h> int main(){ pid_t pid=fork(); if(pid>0){ //父进程 printf(" This is father%d \n",getpid()); sleep(35); }else{ //子进程 printf("This is child %d\n",getpid()); sleep(3); exit(EXIT_SUCCESS); } return 0; }
3)优先级:进程调度的先后顺序,pri越大,优先级越低
调整优先级的命令:nice renice 或者top ->r->pid->nice值
4)程序计数器:程序中即将被执行的下一条指令的地址。
5)内存指针:程序代码和相关数据的指针...
6)上下文:CPU各种寄存器在内存中保存的一份副本
7)记账信息:一个进程在CPU上的执行信息。
8)文件描述符表
9)信号相关结构:信号屏蔽字,未决信号集,捕捉信号的函数指针数组..
10)...
4.环境变量
类似于全局变量
创建环境变量: export 变量名
查看环境变量:echo $变量名
介绍两个环境变量
1)_PATH_:值为一组目录,在Shell下输入命令在目录中查找对应的可执行程度
2)_LD_LIBRARY_PATH:值也是一组目录,当执行可执行环境变量对应的目录中查找动态链接库。
查看所有环境变量 env
通过函数设置环境变量
设置环境变量 putenv(“name=value”) 函数
取值 getenv(“环境变量名”)
删除环境变量: unset 变量名
5.虚拟地址空间