ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux 系统编程核心:进程生命周期与多任务实现

Linux 系统编程核心:进程生命周期与多任务实现 一 . 多任务多任务让程序具备同时处理多个任务的能力并发如何实现多任务多进程、多线程1.进程进程正在执行的程序需要消耗内存和CPU。进程和程序的区别程序是一组数据指令集合存储在硬盘空间是静态的进程存储在内存空间执行过程需要CPU参与内存CPU进程具备动态的生命周期从启动到消亡。程序运行起来产生一个进程也可产生多个进程在一个进程中也可以执行多个程序。2.进程的创建./a.out -----启动进程进程在被创建的时候操作系统会为该进程分配0-4G的虚拟内存空间。进程是操作系统资源分配的最小单位。3.进程的调度CPU调度进程宏观并行微观串行并发并行多个任务同时执行CPU调度算法时间片轮询算法先来先服务后来后服务算法高优先级优先执行算法短作业优先算法4.进程的状态操作系统进程状态三态图Linux操作系统进程状态1.运行态(用户运行态、内核运行态) R正在执行,且被CPU任务调度所执行的进程2.就绪态 R正在执行,没有CPU任务调度执行的进程只缺少cpu3.可唤醒等待态 S也称为睡眠态,阻塞等待资源的进程4.不可唤醒等待态 D不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态5.暂停态 T被暂停执行的进程6.僵尸态 Z进程执行结束,空间没有被回收7.结束态 X进程执行结束,空间被回收5. 进程的消亡1. 进程退出进程执行结束退出主函数中遇到return退出exit()exit() ,Exit()结束进程通过信号结束一个进程kill -9 进程IDvoid exit(int status);功能退出一个进程参数status进程结束时的状态0正常退出0因为其他原因退出void _exit(int status);void _Exit(int status);2. 进程回收6. 进程相关命令1. ps -aux查看操作系统所有进程的相关参数PID进程ID号、创建者、状态、CPU占有率、内存占有率ps -aux | grep a.out| 管道将前面的输出作为后面的输入grep 字符串查找2. ps -ef查看操作系统所有进程的相关参数PID、PPID父进程创建新进程的进程是该新进程的父进程子进程创建出来的新进程是子进程PID : Process ID 进程ID号PPID父进程ID号3. top动态查看进程状态及CPU占有率、内存占有率4. pstree查看进程间的创建关系族谱图pstree -sp 进程ID查看指定ID的进程的创建关系5. killkill -信号名称/信号ID PID给PID对应的进程发送一个信号kill -l 查看系统定义出来的信号kill -9 PID 结束一个进程S : 处于可中断睡眠状态的前台进程S: 处于可中断睡眠状态的后台进程T: 处于暂停态的后台进程6. fg 后台进程编号将后台进程调到前台jobs 查看当前后台进程编号7.进程相关的函数fork()子进程操作系统通过完整拷贝父进程0-3G的用户空间数据到子进程。内核空间拷贝部分内容PCB块PID不拷贝PPID不拷贝程序执行的位置文件管理注意:进程共用3G-4G这1G的内核空间但各自进程0-3G用户空间互相独立不能互相通信。进程间不能直接通信要通信需要借助内核空间IPC机制pid_t fork(void);功能创建新的进程新进程叫子进程原来的进程叫父进程参数返回值成功父进程中返回子进程的PID号子进程中返回 0失败-1没有新进程被创建getpid获取当前进程自己的PID号getppid获取当前进程的父进程的PID号僵尸进程和孤儿进程僵尸进程进程已退出但其资源空间没有被其父进程回收。孤儿进程父进程先结束其父进程创建的子进程成为孤儿进程将会被系统进程所收养结束后由系统进程回收。比如守护进程如何避免僵尸进程产生由其父进程对僵尸态进程进行回收wait()、waitpid()让进程称为孤儿进程结束后由操作系统回收。waitwaitpid#include sys/types.h#include sys/wait.hexit*pid_t wait(intwstatus);功能阻塞回收僵尸态的进程资源空间和状态参数wstatus 用来存储进程退出时的状态参数返回值成功回收到的子进程ID号失败-1wait(NULL);*pid_t waitpid(pid_t pid, intstatus, int options);功能回收指定进程的资源和wait功能相似比wait更灵活参数pid-1 回收指定进程组内的任意子进程 -100.等待GID100的进程组中的任意子进程-1 回收任意子进程组内外0 回收和当前调用waitpid一个组的所有子进程组内0 回收指定ID的子进程status 子进程退出时候的状态如果不关注退出状态用NULLoptions 选项线程0 表示回收过程会阻塞等待WNOHANG 表示非阻塞模式回收资源。返回值 成功 返回接收资源的子进程pid失败 -1设定为非阻塞且没有回收到子进程返回0waitpid如果以阻塞方式回收和wait使用方式一样如果父进程有任务需要执行则可以选择waitpid非阻塞方式回收此时搭配轮询方式实现。8.exec函数簇作用在一个进程中执行外部的一个可执行程序。本质exec将要执行的外部程序替换到了进程的文本区int execl(const char *path, const chararg, …/(char *) NULL */);参数path 可执行行程序所在路径“/bin/ls”arg : 执行可执行程序时传递的参数。NULL 参数的结束标志返回值失败-1int execlp(const char *file, const chararg, …/(char *) NULL */);功能执行PATH环境变量保存的路径中的可执行程序参数file 可执行文件的名称arg : 执行可执行程序时传递的参数。NULL 参数的结束标志int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);参数path 可执行行程序所在路径file 可执行文件的名称argv 存放执行可执行程序时传递参数的指针数组int execle(const char *path, const chararg, …/, (char *) NULL, char * const envp[ ] */);int execvpe(const char *file, char *const argv[ ],char *const envp[]);l list–》列表p PATH 环境变量 保存了系统中已有的可执行程序的存放路径v vector 容器
返回列表