今天主要学习进程的相关概念进程的创建回收以及相关的api我觉得最让我难理解的是几个进程是如何在内存中如何操作的以及内存 内存映射单元与物理空间的相关区分今天学习的部分其他都还容易理解1.进程概念程序存放在外存中的一段代码集合进程是程序动态执行的过程创建 销毁 调度 消亡2.进程相关命令top 根据cpu占用率来查看进程 ps -ef 可用管道命令|搭配grep来检索查看某个进程 pstree 进程树 ps -aux 查看进程运行状态 kill 杀死进程 今天学习时误用为kill 9 进程pid 导致not permittd 正确用法为 kill -9 进程pid killall -9 进程名 ./a.out 后台执行任务 jobs 查看后台执行任务 fg 编号 将后台任务放到前台执行 *注意这里的编号不是pid而是jobs查看后的那个编号 ps 查看终端下的前后台执行的任务 nice -n 优先级 进程任务 renice -n 优先级 进程pid3.进程的创建1. 32位操作系统下进程占0 - 4G虚拟内存空间可以划分为文本段、数据段及系统数据段1. 文本段指令2. 数据段字符串常量、未初始化全局变量/静态变量、初始化的全局变量/静态变量3. 系统数据段堆区、栈区2.特性进程空间是独立的每个进程独享进程空间所有进程共享0-4G虚拟内存空间分时复用4.什么是进程调度1.操作系统内核决定下一时刻CPU交给哪个进程去运行2.进程调度算法1. 先来先执行后来后执行2. 高优先级调度算法3. 时间片轮转调度算法宏观并行微观串行4. 多级队列反馈调度算法5. 负载均衡调度算法3.时间片cpu在进程中执行的一小段时间称为时间片4.进程状态1. 就绪态R没有被CPU轮转到的正在执行的任务2. 运行态R正在被CPU执行的任务3. 可唤醒等待态S由于缺少资源让程序暂时挂起的状态等待过程中可以被唤醒4. 不可唤醒等待态D等待过程中不会被唤醒称为不可唤醒等待态5. 停止态T由于系统需要让进程任务暂停则将进程设置为停止态6. 僵尸态Z进程代码执行结束空间没有被回收7. 结束态X代码执行结束空间被回收的时刻5.相关apiforkpid_t fork(void); 功能 创建一个子进程空间 参数 缺省 返回值 成功父进程中返回子进程的PID 子进程中返回0 失败返回-1getpidid_t getpid(void); 功能 返回调用进程的进程ID号 getppid() 功能 返回父进程的pidexitvoid exit(int status); 功能 进程结束 主函数中调用exit与调用return效果相同 函数体内调用return函数结束调用exit让进程结束waitpid_t wait(int *wstatus); 功能 回收子进程空间 参数 wstatus存子进程结束状态空间的首地址 返回值 成功返回回收到的子进程的PID 失败返回-1 WIFEXITED(wstatus)检测子进程是否正常退出 WEXITSTATUS(wstatus)获得子进程退出时的值 WIFSIGNALED(wstatus)检测子进程是否被信号杀死 WTERMSIG(wstatus)获得杀死信号的编号wait回收子进程空间避免子进程成为僵尸进程wait具有阻塞功能能够实现多任务同步6.进程的消亡1.僵尸进程产生原因进程代码执行结束后空间没有被回收就会变成僵尸进程2.如何避免僵尸进程1.让父进程先结束子进程成为孤儿进程再被init进程收养子进程结束最后子进程被init进程回收2.子进程结束让父进程回收子进程就可以有效避免僵尸进程