进程基础

    xiaoxiao2023-11-14  157

    进程的概念

    课本:程序的一个执行实例,正在执行的程序等内核:但当分配系统资源(CPU时间、内存)的实体

    管理进程

    描述进程

    进程信息被放在一个叫做进程控制块的数据结构中,称之为PCBLinux中描述进程PCB的结构体为task_struct,是内核的一种数据结构,会被装载到RAM中,并包含着进程的信息

    task_struct内容

    标识符pid:描述本进程的唯一标识符,区别其他进程状态:任务状态、退出代码、退出信号等优先级:相对于其他进程的优先级程序计数器:程序中即将被执行的下条指令地址,CPU里的重要寄存器PC指针内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针上下文数据:进程执行时处理器的寄存器中的数据,包括通用寄存器、程序计数器、程序状态字PSW(如执行方式、中断屏蔽字等)、用户栈指针(存放过程调用和系统调用参数和调用地址)I/O状态信息:包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表记账信息:可能包括处理器时间总和,使用的时钟数总和、时间限制、记账号等其他信息

    组织进程

    所有运行在系统的进程都以task_struct链表的形式存在内核中

    查看进程

    ls /proc/n:查看n号进程信息ps aux | grep test | grep -v grep:查看关于test的进程信息top:相当于windows的任务管理器

    进程标识符

    进程标识符可以通过系统调用接口获取,包含在头文件<sys/type.h>和<unistd.h>中getpid():获取子进程的pidgeetppid():获取父进程的pid

    进程状态

    运行状态R:表明进程在运行中或在运行队列中睡眠状态S:也称为可中断睡眠状态,进程在等待事件完成,可以被kill掉磁盘休眠状态D:也称为不可中断睡眠状态,这个状态的进程会等待I/O的结束,不能被kill掉停止状态T:可以通过发送SIGSTOP信号给进程来停止进程,被暂停的进程可以通过发送SIGCOUT信号让进程继续执行死亡状态X:这个状态只是一个返回状态,不会再列表中看到

    修改进程状态

    kill -l:查看系统支持的信号列表kill -SIGSTOP pid:使pid号进程停止kill -SIGCOUT pid:使pid号进程继续运行

    僵尸进程

    僵尸状态(Z)是一个比较特殊的状态,当进程退出并且父进程没有读到子进程的退出代码就会产生僵尸进程僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取子进程的退出代码当子进程提前退出,父进程还在运行但是没有读取子进程的退出代码,子进程进入僵尸状态

    危害

    子进程的退出状态会一直维护下去,维护退出状态本身就是要用数据维护,也属于进程基本信息,保存在task_struct中所以僵尸状态不退出,PCB要一直维护退出信息,如果一个父进程创建了许多子进程,都不进行回收,会造成内存资源的极大浪费,也会造成内存泄漏

    孤儿进程

    父进程提前退出,子进程就是孤儿进程,孤儿进程会被1号init进程领养,由init进程回收

    进程优先级

    CPU资源分配的顺序就是进程的优先级

    查看系统进程

    可以通过ps -l来查看

    UID:执行者身份PID:子进程的pidPPID:父进程的pidPRI:进程的优先级NI:进程的nice值

    PRI和NI

    PRI是进程的优先级,值越小优先级越高NI是进程的nice值,表示进程可被执行的优先级修正数值,nice值取值范围是[-20,19]这40个级别,存在上下限是为了让调度器调度资源均衡进程的优先级PRI(new) = PRI(old) + nice,所以调整进程的优先级就是调整nice值nice值不是进程的优先级,但是nice值会影响进程的优先级

    修改进程优先级

    nice -n x ./test:启动前调整test进程的nice值为xrenice x -p xxxx:将pid为xxxx的已存在进程nice值设为x用top修改已存在进程的nice:top->进入top后按"r"->输入进程pid->输入nice值

    最新回复(0)