版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021-8-9Page 1 2021-8-9Page 2 1、概念: 进程就是运行中的程序,一个运行着的 程序,可能有多个进程。 进程是一个动态的实体,是程序的一次执行 过程。操作系统最核心的概念就是进程。 进程是操作系统资源分配的基本单位。操作 系统借助于进程来管理计算机的软、硬件资 源,支持多任务的并行执行。 2021-8-9Page 3 2、进程与程序、线程区别 进程是动态的,程序是表态的 进程是运行中的程序,程序是一 些保存在硬盘上的可执行的代码。 进程由线程构成 2021-8-9Page 4 3、进程进程的实体结构的实体结构 进程控制块PCB 程序段 数据段 2021-8-9Pag
2、e 5 4、进程控制块进程控制块PCB (1)进程控制块是进程动态实体的构成部分,不 包含于程序的二进制代码中。 (2)进程控制块位于系统的内核内存区域中,是 操作系统中的重要记录型数据结构。 (3)进程控制块是进程存在的唯一标志。 (4)进程控制块用于描述进程进展情况及控制进 程运行所需的全部信息,具体包括: 进程描述信息:进程标识符、隶属用户名或用户标识号等; 进程调度信息:进程状态、进程优先级、阻塞事件等; 进程控制信息:程序及数据地址、进程同步和通信机制等。 2021-8-9Page 6 5、进程标识、进程标识 Linux操作系统中,每个进程都是通过 唯一的进程ID标识。进程ID是一个
3、非负数。 每个进程除了进程ID外还有一些其他标识信 息,它们都可以通过相应的函数获得。这些 函数的声明在unistd.h头文件中。 获取进程各种标识符的函数获取进程各种标识符的函数 (1)getpid( ) pid_t getpid(void); 功能功能:获得当前进程获得当前进程ID (2)getppid( ) pid_t getppid(void); 功能功能:获得进程父进程的获得进程父进程的ID; 2021-8-9Page 7 6、Linux进程状态 (1)可运行状态可运行状态 (2)可中断睡眠状态可中断睡眠状态 (3)不可中断睡眠状态不可中断睡眠状态 (4)暂停状态暂停状态 (5)僵死
4、状态僵死状态 2021-8-9Page 8 (1) 可运行状态可运行状态 当进程当进程正在被CPU执行,或已经,或已经准备就 绪随时可由调度程序执行,则称该进程为处,则称该进程为处 于运行状态(于运行状态(running)。进程可以在内核态)。进程可以在内核态 运行,也可以在用户态运行。当系统资源已运行,也可以在用户态运行。当系统资源已 经可用时,进程就被唤醒而进入准备运行状经可用时,进程就被唤醒而进入准备运行状 态,该状态称为态,该状态称为就绪态。这些状态态。这些状态在内核中 表示方法相同, 都被称为处于都被称为处于 TASK_RUNNING 状态。状态。 2021-8-9Page 9 (2
5、)可中断睡眠状态可中断睡眠状态 当进程处于可中断等待状态时,系当进程处于可中断等待状态时,系 统不会调度该进行执行。当系统统不会调度该进行执行。当系统产生一 个中断或者释放了进程正在等待的资源, 或者进程收到一个信号,都可以唤醒进,都可以唤醒进 程转换到就绪状态(运行状态)。程转换到就绪状态(运行状态)。 2021-8-9Page 10 (3)不可中断睡眠状态不可中断睡眠状态 与可中断睡眠状态类似。但处于该与可中断睡眠状态类似。但处于该 状态的进程只有状态的进程只有被使用wake_up()函数明确 唤醒时才能转换到可运行的就绪状态。时才能转换到可运行的就绪状态。 2021-8-9Page 11
6、 (4)暂停状态暂停状态 当进程收到信号当进程收到信号 SIGSTOP、 SIGTSTP、SIGTTIN 或 SIGTTOU 时就会时就会 进入暂停状态。可向其发送进入暂停状态。可向其发送SIGCONT信号信号 让进程转换到可运行状态。处于该状态的让进程转换到可运行状态。处于该状态的 进程将被进程将被作为进程终止来处理。来处理。 2021-8-9Page 12 (5)僵死状态僵死状态 当进程已停止运行,但其父进程还没有询问其 状态时,则称该进程处于僵死状态。当一个进程的 运行时间片用完,系统就会使用调度程序强制切换 到其它的进程去执行。另外,如果进程在内核态执 行时需要等待系统的某个资源,此时
7、该进程就会调 用 sleep_on()或 sleep_on_interruptible()自愿地放CPU 的使用权,而让调度程序去执行其它进。进程则进 入睡眠状态(TASK_UNINTERRUPTIBLE 或 TASK_INTERRUPTIBLE)。 只有当进程从“内核 运行态”转移到“睡眠状态”时,内核才会进行进 程切换操作。 2021-8-9Page 13 进程状态的关系图:进程状态的关系图: 2021-8-9Page 14 7.2.1 Linux进程的结构进程的结构 2021-8-9Page 15 代码段代码段存放程序程序的可执行代码存放程序程序的可执行代码 数据段数据段initiali
8、zed data存放程序已经初始化的全局变量、常存放程序已经初始化的全局变量、常 量、静态变量量、静态变量 uninitialized data存放程序存放程序未初始化未初始化的全局变量、静态的全局变量、静态 变量变量 堆栈段堆栈段栈栈用于函数调用,存放着函数的参数、用于函数调用,存放着函数的参数、 函数内部定义的局部变量函数内部定义的局部变量 堆堆存放动态分配的内存变量存放动态分配的内存变量 7.2.2 Linux进程的结构内存布局进程的结构内存布局 2021-8-9Page 16 例题:demo1 1. ps 进程状态查询命令进程状态查询命令 命令格式:命令格式: ps 选项选项 常用选项
9、:常用选项: a 显示所有用户进程。 e 显示进程环境变量。 l 给出长列表。 r 只显示正在运行的进程。 S 增加CPU时间和页面出错。 w 按宽格式显示输出。默认情况下,如果输出结果不能在一行里 显示,将会缩短结果输出。使用这个选项可以避免这个问题。 txx 只显示受tty.xx控制的进程。 u 打印用户格式,显示用户名和进程的起始时间。 x 显示不带控制终端的进程。 2021-8-9Page 17 2. kill 结束进程命令结束进程命令 命令格式:命令格式: kill 选项 信号 常用选项:常用选项: s 指定需要送出的信号。既可以是信号名也可以对应数字。指定需要送出的信号。既可以是信
10、号名也可以对应数字。 p 指定指定kill命令只是显示进程的命令只是显示进程的PID,并不真正送出结束信号。,并不真正送出结束信号。 l 打印可以用打印可以用kill送的信号名表,可以在送的信号名表,可以在/usr/include/linux/signal.h文件文件 中找到。中找到。 2021-8-9Page 18 3. who命令查看当前在线上的用户情况命令查看当前在线上的用户情况 命令格式:命令格式: who imqsuwHT -count -idle -heading -help -message -mesg -version -writable file am i 不使用任何选项时,
11、不使用任何选项时,who命令将显示以下三项内容:命令将显示以下三项内容: login name:登录用户名; terminal line:使用终端设备; login time:登录到系统的时间。 常用选项:常用选项: -m显示运行该程序的用户名。 -q只显示用户的登录帐号和登录用户的数量,该选项优先级 高于其他任何选项。 -i 在登录时间后面显示该用户最后一次对系统进行操作至今 的。 -H 显示一行列标题。 2021-8-9Page 19 4. top命令显示系统当前的进程和其他状况命令显示系统当前的进程和其他状况 top命令和ps命令的基本作用是相同的,但是top是一 个动态显示过程,即可以
12、通过用户按键来不断刷新当前状态。 命令格式:命令格式: top - d delay q c s S 常用选项:常用选项: d 指定每两次屏幕信息刷新之间的时间间隔。 q 该选项将使top没有任何延迟的进行刷新。 S 指定累计模式。 s 使top命令在安全模式中运行。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名。 2021-8-9Page 20 5. w命令显示登录到系统的用户情况命令显示登录到系统的用户情况 w命令也用于显示登录到系统的用户情况,但是与 who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系 统,还可以显示出这些用户当前正在进行的工作
13、,并且统计数据相 对who命令来说更加详细和科学,可以认为w命令就是who命令的一 个增强版。 命令格式:命令格式: w -husfV user 下面对参数进行说明:下面对参数进行说明: -h 不显示标题。 -u 当列出当前进程和CPU时间时忽略用户名。 -s 使用短模式。不显示登录时间、JCPU和PCPU时间。 -f 切换显示FROM项,也就是远程主机名项。默认值是不显 示远程主机名。 -V 显示版本信息。 -User 只显示指定用户的相关情况。 2021-8-9Page 21 Linux进程控制包括创建进程、执行进程控制包括创建进程、执行 新程序、退出进程以及改变进程优先级等。新程序、退出
14、进程以及改变进程优先级等。 2021-8-9Page 22 2021-8-9Page 23 创建进程创建进程 1.fork()函数 2.Vfork()函数 7.4.17.4.1创建进程创建进程 1.fork()函数函数 # include # include pid_t fork(void); 功能功能:系统调用fork()是创建一个新进程的方法 返回值返回值:fork()函数有两个返回值,即调用一次返回两次。 一个是父进程调用fork()函数后的返回值,该返回值是刚刚创建的子进程 的ID; 另一个是子进程中fork()函数的返回值0。fork()函数返回两次的前提是进 程创建成功; 如果进程
15、创建失败,则返回-1。 2021-8-9Page 24 注意:fork函数返回子进程的pid 7.4.17.4.1创建进程创建进程 注意点:注意点:fork()fork()函数调用一次返回两次的理解函数调用一次返回两次的理解 例题:demo2.c (1)fork函数的源代码功能组成函数的源代码功能组成 为子进程分配内存空间; 将父进程空间的全部内容复制到子 进程内存空间; 在内核PCB区域创建并初始化子进 程的PCB (其中包括pid,EIP=善后代码的第 1行指令地址) 最后fork中还包含一段善后代码。 (2)fork创建的子进程执行的第一行代码在创建的子进程执行的第一行代码在fork函数
16、内部(分函数内部(分 叉点在叉点在fork函数内部的善后代码第一行),所以调用一次函数内部的善后代码第一行),所以调用一次fork 将出现两次的返回,且将出现两次的返回,且都是返回各自子进程的都是返回各自子进程的PID。 7.4.17.4.1创建进程创建进程 注意点:当把注意点:当把forkfork调用语句视为原子级时,可调用语句视为原子级时,可 以认为父、子进程的执行分叉点就是以认为父、子进程的执行分叉点就是forkfork调调 用语句用语句 父、子进程分别从fork函数返回后,接 着分别执行fork调用语句的下一条语句。 Page 26例题:demo2.c 7.4.17.4.1创建进程创建
17、进程 注意点:在注意点:在forkfork内部分叉后,父、子进程哪个先内部分叉后,父、子进程哪个先 执行是不确定的,取决于执行是不确定的,取决于OSOS进程调度策略进程调度策略。 为了使程序在执行fork后续代码时,子进 程先相应,可以在父进程执行的代码中使用 sleep(秒数)和wait()。 Page 27例题:demo2.c 7.4.17.4.1创建进程创建进程 2.Vfork()函数函数 #include #include pid_t vfork(void); 功能: vfork()函数的调用方法与fork()函数完 全相同,也是用来创建一个新进程。 返回值:返回值:正确返回:在父进程
18、中返回子进程的进 程号,在子进程中返回0;错误返回:-1。 Page 28 7.4.17.4.1创建进程创建进程 3 3、forkfork对文件描述符的影响对文件描述符的影响 (1 1)文件描述符的本质)文件描述符的本质 文件描述符文件描述符 2021-8-9Page 29 在每个进程中有且只在每个进程中有且只 有一张属于自己的文有一张属于自己的文 件描述符表。文件描件描述符表。文件描 述符表可视为指针数述符表可视为指针数 组,数组的指针元素组,数组的指针元素 指向文件表的一个元指向文件表的一个元 素,数组的小标就是素,数组的小标就是 文件描述符。文件描述符。 文件表整个系统只有文件表整个系统
19、只有 一张一张(系统级系统级) i i结点表整个系统只有结点表整个系统只有 一张一张( (系统级系统级) ),一个,一个 元素对应一个物理文元素对应一个物理文 件件 7.4.17.4.1创建进程创建进程 3 3、forkfork对文件描述符的影响对文件描述符的影响 (2)fork(2)fork对文件描述符的影响对文件描述符的影响 Page 30 例题:demo3.c fork执行会导致子进程继承父进程打开的文件描述符。执行会导致子进程继承父进程打开的文件描述符。 子进程将父进程的整个文件描述符表复制一份,且 open函数在fork函数之前调用,从而父子进程拥有相同的 文件表元素。这将导致父(子
20、)进程读取文件后,子 (父)进程将读取同一文件的后续内容。 7.4.17.4.1创建进程创建进程 3 3、forkfork对文件描述符的影响对文件描述符的影响 子进程将父进程的整个文件描述符表复制一份,且open 函数在fork函数之后调用,从而父子进程拥有各自的文 件表元素。这将导致父、子进程读取文件操作是独立的, 互不影响。 例题:demo4.c 7.4.17.4.1创建进程创建进程 4 4、waitwait函数函数 (1)使用)使用wait的原因的原因 fork克隆出子进程后,克隆出子进程后,为了使子进程先于父进程为了使子进程先于父进程 运行运行。在系统负荷不重时,可以在父进程中使用。在
21、系统负荷不重时,可以在父进程中使用 sleep( )的方式让父进程进入休眠来实现。的方式让父进程进入休眠来实现。 如果系统负荷重的情况下,使用如果系统负荷重的情况下,使用sleep( ),有可能,有可能 时间已过,系统还是没有调度到子进程。时间已过,系统还是没有调度到子进程。 wait函数用于使父进程阻塞,直到一个子进程结函数用于使父进程阻塞,直到一个子进程结 束或者该进程接收到一个指定信号为止才继续执行束或者该进程接收到一个指定信号为止才继续执行 父进程。这样可以父进程。这样可以100%保证父、子进程按照程序员保证父、子进程按照程序员 的预先安排来执行程序。的预先安排来执行程序。 例题:de
22、mo2.c (2 2)waitwait函数函数 #include #include pid_t wait(int *status); 功能:功能:等待进程结束(使父进程阻塞,直到一个子进程 结束或者该进程接收到一个指定信号为止才继续执行父 进程) 返回值:返回值:成功,返回子进程ID号;出错,返回-1 参数:参数: 参数名参数名说明说明注意注意 status存放进程结束状态传址 注意:通过传址status可以达到一个函数执行后返回两个或多个值的效果。 (2 2)waitwait函数函数 与与wait函数联合使用的多个宏函数说明函数联合使用的多个宏函数说明 函数函数说明说明 WIFEXITED(
23、status)用于判断子进程的返回状态是否正常,正常 返回真,否则为假。 WEXITSTATUS(status)读取子进程正常退出的状态值。 WIFSIGNALED(status)用于判断子进程的退出状态是否非正常,非 正常退出返回真,否则为假。 WTERMSIG(status)用来返回非正常退出状态的信号number 例题:demo5.c 7.4.17.4.1创建进程创建进程 5 5、waitpidwaitpid函数函数 #include #include pid_t waitpid(pid_t pid, int *status, int options); 功能:功能:等待进程结束 返回值
24、:返回值:成功,返回子进程ID号;出错,返回-1 参数:参数: 参数名参数名说明说明注意注意 pid要等到的子进程ID-1表示等待任意一个子进程 status存放进程结束状态传址 options等待方式0表示不设置等待方式 例题:使用waitpid修改demo5.c为demo6.c 7.4.27.4.2在子进程中执行新程序在子进程中执行新程序 1 1、execexec函数函数 #include int execle(const char *path, const char *arg0, ., char * const envp); 功能:功能:在用fork函数创建子进程后,子进程往往要调 用一
25、个exec函数以执行另一个程序。 原理:原理:当进程调用一种exec函数时,该进程完全由 新程序代换,而新程序则从其main函数开始执行。 因为调用exec并不创建新进程,所以前后的进程ID 并未改变。exec只是用另一个新程序替换了当前进程 的正文、数据、堆和栈段。 7.4.27.4.2在子进程中执行新程序在子进程中执行新程序 1 1、execexec函数函数 返回值:返回值:执行失败返回-1 参数:参数: 参数名参数名说明说明注意注意 pathname要执行二进制程 序文件路径 arg0执行二进制程序 的第一个参数 arg0为二进制程序名; 可以有arg1、arg2、. . . ; 要以“
26、(char *)0”或“NULL” 结束arg参数 envp环境变量 例题:demo7.c 7.4.27.4.2在子进程中执行新程序在子进程中执行新程序 2 2、execexec函数的函数的6 6种形态种形态 int execl(const char * pathname, const char * arg0, . , (char *) 0); int execv(const char * pathname, char *const argv ); int execlp(const char * filename, const char * arg0, ., (char *) 0 ); int
27、 execvp(const char * filename, char *const argv ); int execle(const char * pathname, const char * arg0, ., (char *)0, char *const envp ); int execve(const char * pathname char *const argv , char *const envp ); L(List) 列表参数,最后要有一个NULL V(Vector) 数组为命令参数 E(Environment) 可以传递环境变量 P(Path) 在PATH环境变量中查找程序的二
28、进制文件 注意:对于没有指定环境变量的,子进程将继承父进程的环境变量 7.4.27.4.2在子进程中执行新程序在子进程中执行新程序 3 3、execexec函数的函数的6 6种形态的系统处理关系种形态的系统处理关系 execvp execlpexecl execv execle 程序举例:程序举例: char *ps_argv=“ps”,”-ax”, NULL; char *ps_envp=“PATH=/bin:/usr/bin”,”TERM=console”, NULL execl(“/bin/ps”, “ps”, “-ax”, NULL); execv(“/bin/ps”, ps_argv
29、); execle(“/bin/ps”, “ps”, “-ax”, NULL, ps_envp); execve(“/bin/ps”, ps_argv, ps_envp); execlp(“ps”, “ps”, “-ax”, NULL); execvp(“ps”, ps_argv); 7.4.27.4.2在子进程中执行新程序在子进程中执行新程序 4 4、多进程中调试子进程、多进程中调试子进程 例题:demo9.c 在子进程最前面加入printf(child process pid:%dn,getpid(); 而后加入sleep(60) gcc g 编译程序 gdb 调试程序 在fork处设断点
30、,使用r运行,s调试fork得到子进程pid 在另一个终端使用sudo gdb 程序 子进程pid l命令查看程序,在子进程中设断点 使用n或s调试程序,等到子进程的sleep执行完,继续调试 7.4.37.4.3进程的消忙进程的消忙 用户函数 主函数main Start-up routine Exit 函数标准IO库缓存刷新 内核 exec -exit -exit -exit -exit exit exit exit call return call call return return 用户程序空间 内核缓存 (大小固定) 标准IO函数 系统调用IO函数 系统调用IO函数 系统调用IO函数
31、 Exit Handler call return C语言的执行程序是通过内核调用exec启动; 在main函数运行之前,内核先启动用户程序中默认的例程 Start-up routine。该例程为main的执行准备环境(包括argc、 argv参数),已经调用main函数。 7.4.37.4.3进程的消忙进程的消忙 1 1、启动例程与、启动例程与mainmain函数函数 Page 43 (1)区别)区别 exit函数在返回内核之前会执行一些清理操作。 _exit函数立即返回内核,不做清理工作。 (2)exit函数所做的清理工作函数所做的清理工作 调用Exit handle 关闭标准的I/O流(刷新buffer中的数据,即将 buffer中的数据提交到内核,完成输入或输出) 参照图解 7.4.37.4.3进程的消忙进程的消忙 2 2、exitexit函数与函数与_exit_exit函数函数 Page 44 7.4.37.4.3进程的消忙进程的消忙 用户函数 主函数main Start-up routine Exit 函数标准IO库缓存刷新 内核 exec -exit -exit -exit -exit exit exit exit call return call call retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保公司解除租赁协议
- 污水处理招投标委托书范例
- 农业物流服务合同管理指南
- 文化产业严禁参与盗版侵权承诺书
- 公共广场地砖铺设合同
- 建筑加固改造升级劳务协议
- 上海市工业园区基础设施施工合同
- 医疗机构用工规范承诺书
- 石油开采设备日常养护管理办法
- 渔业捕捞与加工合同
- 《农村劳动人员就业问题分析【论文】》
- 中职《形体与化妆技巧》课程标准
- DB11-T 1832.15-2022建筑工程施工工艺规程 第15部分:通风与空调安装工程
- 医学英语教程(4)课件
- 网络传播法导论-第五章课件
- 月报 施工单位完成工程量统计表
- 情绪智力量表EIS
- 《 民航服务心理学》考试题及参考答案
- 《短歌行》理解性默写
- 部编版正视发展挑战优秀公开课课件
- 50篇美文背3500单词英译英(全)
评论
0/150
提交评论