收藏 分销(赏)

3Linux进程管理.pptx

上传人:天**** 文档编号:4707505 上传时间:2024-10-10 格式:PPTX 页数:44 大小:2.69MB 下载积分:12 金币
下载 相关 举报
3Linux进程管理.pptx_第1页
第1页 / 共44页
3Linux进程管理.pptx_第2页
第2页 / 共44页


点击查看更多>>
资源描述
13 Linux进程管理进程管理基础知识:进程和服务管理基础知识:进程和服务管理231 Linux进程管理进程管理1.1 进程及作业的概念l多用户、多任务。根据每个任务的优先级为每个任务分配时间片lLinux系统上所有运行的内容都可以称为进程,我们关心的是如何去控制这些进程l进程与程序,程序静态命令集,进程是动态运行的程序。一个程序可以启动多个进程41.2 进程管理l一条简单的命令可能会涉及多个进程,尤其是使用管道和重定向时lLinux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性:l交互进程交互进程:由由shell启动的进程,既可在前台运行,又可在后台启动的进程,既可在前台运行,又可在后台运行运行l批处理进程批处理进程:这种进程和终端没有联系,是一个进程序列。这种进程和终端没有联系,是一个进程序列。l守护进程守护进程:在后台持续运行的进程。在后台持续运行的进程。l前台:指一个进程控制标准输入和输出。l后台:一个程序不从标准输入接受输入,也不将结果输出到标准输出上,不经用户干预的程序适合运行在后台。l进程与作业:一个正在执行的进程称为一个作业,而作业可以包含一个或多个进程,尤其是在使用了管道和重定向命令时。5l结束进程结束进程l前台进程 Ctrl+cl后台进程 kill命令使用ps命令查看PIDkill PIDkill-9 PID 无条件地撤销一个进程l守护进程守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。62 查看系统进程信息查看系统进程信息l2.1 ps命令(processstatus)l功能说明:报告程序状况。l语法:ps选项l补充说明:ps是用来报告程序执行状况的指令,您可以搭配kill指令随时中断,删除不必要的程序 l#ps auxla:选择列出所有的程序lu:列出所有用户的程序lx:列出所有tty(简单理解为终端)的程序l查看系统进程命令:#ps ax l分页查看:#ps ax|lessl查看进程及所有者:#ps auxl查看某一进程(例:cupsd)是否运行:#ps ax|grep less78ps命令输出字段的含义命令输出字段的含义USER进程所有者的用户名进程所有者的用户名PID进程号进程号%CPU进程自最近一次刷新以来所占用的进程自最近一次刷新以来所占用的CPU时间和总时间的百分比时间和总时间的百分比%MEM进程使用内存的百分比进程使用内存的百分比VSZ进程使用的虚拟内存大小,以进程使用的虚拟内存大小,以K为单位为单位RSS驻留空间的大小。显示当前常驻内存的程序的驻留空间的大小。显示当前常驻内存的程序的K字节数。字节数。TTY进程相关的终端进程相关的终端STAT 进程状态,用下面的代码中的一个给出:进程状态,用下面的代码中的一个给出:D 不可中断不可中断 Uninterruptible sleep(usually IOR 正在运行,或在正在运行,或在 队列中的进程队列中的进程 S 处于休眠状处于休眠状 T 停止或被追踪停止或被追踪 Z 僵尸进僵尸进 W 进入内存交换(从内核进入内存交换(从内核2.6开始无效)开始无效)X 死掉的进程死掉的进程 高优先级高优先级 N 低优先级低优先级 L 有些页被锁进内存有些页被锁进内存 s 包含子进程包含子进程+位于后台的进程组;位于后台的进程组;l 多线程,克隆线程多线程,克隆线程TIME进程使用的总进程使用的总CPU时间时间COMMAND被执行的命令行被执行的命令行NI 进程的优先级值,较小的数字意味着占用较少的进程的优先级值,较小的数字意味着占用较少的CPU时间时间PRI进程优先级进程优先级。PPID父进程父进程IDWCHAN进程等待的内核事件名进程等待的内核事件名9l查看查看less进程是否在运行进程是否在运行102 查看系统进程信息查看系统进程信息l2.2 top命令l功能说明:显示,管理执行中的程序。l语法:topbciqsSdnl补充说明:执行top指令可显示目前正在系统中执行的程序,并通过它所提供的互动式界面,用热键加以管理。l#top 相对于ps命令,top可以用动态的方式监测程序的运行,并且可以进行排序113 管理服务管理服务l3种不同的方法启动或停止这些服务l服务配置工具 lntsysv lchkconfig12l服务配置工具:l应用程序-系统设置-服务器设置-服务 l#system-config-service13l/etc/services文件文件:列出系统支持的所有服务列出系统支持的所有服务14lntsysv命令命令15l#setup系统服务163 chkconfig和和service命令命令lchkconfig命令(checkconfig)l功能说明:检查,设置系统的各种服务。语法:chkconfig-add-del-list系统服务 或chkconfig-level系统服务on/off/reset补充说明:这是RedHat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。参数:-add增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。-del删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。-level指定读系统服务要在哪一个执行等级中开启或关毕 17l实例:实例:1、查看各种不同的运行等级中各项服务的状况、查看各种不同的运行等级中各项服务的状况182、启动Telnet服务并查看该服务的状态chkconfig kudzu offchkconfig-list kudzu193 chkconfig和和service命令命令lservice命令l功能说明:service命令用于对系统服务进行管理。语法:service 系统服务start/stop/restart/statusl start:启动服务l stop:停止服务l restart:重新启动服务l status:查看状态状态l例:service network restart20l停止bluetooth服务lService bluetooth stopl启动bluetooth服务lService bluetooth startl查看bluetooth服务状态213.1进程进程l 进程进程:处于执行期的程序。包含:可执行的程序代码、打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间、一个或多个执行的线程、存放全局变量的数据段。进程的另一个名字叫任务(task)l 线程线程(thread):在进程中活动的对象。每个线程拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。l Linux系统不区分进程和线程,线程只是一种 特殊的进程。l 进程的创建:fork()l 进程的终结:exit()22233.2 进程描述符及任务结构进程描述符及任务结构l 内核把进程的列表存放在叫做任务队列的双双 向向循循环环链链表表中。链表中的每一项都是类型为 task_struct、称为进程描述符(process descriptor)的结构()。进程描 述符中包含一个具体进程的所有信息:打开的文件、进程的地址空间、挂起的状态等24进程描述符及任务队列进程描述符及任务队列25l进程描述符必须保存的信息类型有:l进程的属性l进程间的关系l进程的内存空间l文件管理l信号量管理l进程的可信度l资源限制l与调度相关的域26分配进程描述符分配进程描述符slab分配器动态生成task_struct,只需在栈底或栈顶创建一个新的结构struct thread_info,X86:struct thread_info struct task_struct*task;struct exec_domain*exec_domain;_u32 flags;_u32 status;_u32 cpu;int preempt_count;2728进程描述符的存放进程描述符的存放内核通过一个唯一的进程标识值(process identification value)或PID来标识每个进程。PID是一个数,表示为pid_t隐含类型,即int。为与老版本兼容,默认最大值、为32768,实际可增加到400万,但这个值越小,转一圈就越快。可通过修改/proc/sys/kernel/pid_max来提高上限。29进程状态进程状态lState域描述了进程的当前状态。其中包括:l TASK_RUNNIG(运行):进程是可执行的l TASK_INTERRUPTBLE(可中断):进程正在睡 眠,等待某些条件的达成,一旦条件成立,内核 会把进程状态设置为运行l TASK_UNINTERRUPTBLE(不可中断)l _TASK_TRACDE:被其他进程跟踪的进程l _TASK_STOPPED:停止,进程停止执行。30task_struct结构中的state域描述了进程的当前状态。系统中的每个进程都必然处于几种进程状态之一。其具体定义见sched.h。#defineTASK_RUNNING0#defineTASK_INTERRUPTIBLE1#defineTASK_UNINTERRUPTIBLE2#defineTASK_STOPPED4#defineTASK_TRACED8#defineEXIT_ZOMBIE16#defineEXIT_DEAD3231图3-3 进程状态变化32l设置当前进程状态设置当前进程状态 内核调整某个进程的状态:set_task_state(task,state)/将任务task的状态 设置为statel进程上下文进程上下文 在用户空间执行的代码执行了系统调用或触发某个异常,陷入内核空间,即内核“代表进程执行”并处于进程上下文中 33l 进程家族树进程家族树 所有的进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程,该进程读取系统的初始化脚本并执行其他的相关程序,最终完成系统启动的整个过程。除了init之外,所有进程都是由其他进程创建的。创建新进程的进程称为新进程的父进程,而被创建的进程称为原进程的子进程。若两个进程都是由同一个进程创建的,则称这两个进程为兄弟进程。Task_struct结构中就有进程的父进程指针、兄弟进程指针以及进程的子进程指针。34353.3 进程创建进程创建Unix采用了与众不同的实现方式,它把上述步骤分解到两个单独的函数中去执行:fork()和和exec().首先,fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID(每个进程唯一)、PPID(父进程的进程号,子进程将其设置为被拷贝进程的PID)和某些资源和统计量(例如挂起的信号,它没有必要被继承)。exec()函数负责读取可执行文件并将其载入地址空间开始运行。把这两个函数组合起来使用的效果跟其他系统使用的单一函数的效果相似。36写时拷贝写时拷贝传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下。Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。37fork()Linux通过clone()系统调用实现fork(),再由clone()去调用do_fork(),定义在kernel/fork.c。再调用copy_process():调用dup_task_struct()为新进程创建内核栈、thread_info结构 和task_struct,这些值与当前进程相同检查当前用户所拥有的进程数目没有超出限值子进程与父进程区分。子进程描述符内的成员被清0或初始化子进程状态被设置为TASK_UNINTERRUPTBLE,不投入运行copy_process()调用copy_flags()以更新task_struct的flags成员调用alloc_pid()为新进程分配一个有效PID根据传递给clone()的参数标志,copy_process()拷贝或共享打 开的文件、文件系统信息、信号处理函数、进程地址空间和命 名空间等。copy_process()做扫尾工作并返回一个指向子进程的指针383.4 线程在线程在Linux中的实现中的实现l线程:提供在同一程序内共享内存地址空间运行的一组线程。线程可以共享打开的文件和其他资源,支持并发程序设计技术。l Linux没有线程的概念,所有进程都当作进程 来实现,没有特别的调度算法或定义特别的数据 结构来表征线程,线程仅视为与其他进程共享某 些资源的进程。线程又称为“轻量级进程”,是一种进程间共享资源的手段。39l 创建线程:在调用clone()的时候需要传递一 些参数标志来指明需要共享的资源:clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND,0)/父子俩共享地址空间、文件系统资源、文件描述符和信号处理程序40l内核线程:独立运行在内核空间的标准进程,在后台执行操作。与普通进程间的区别在于内核线程没有独立的地址空间,只在内核空间运行,从不切换到用户空间,可以被调试和抢占。ps ef可以看到内核线程。l内核线程的创建:内核线程只能由内核线程创建 方法:struct task_struct*kthread_create(int(*threadfn(void*data),void*data,const char namefmt,)/创建 struct task_struct*kthread_run(int(*threadfn(void*data),void*data,const char namefmt,)/运行 int kthread_stop(struct task_struct*k)/结束41423.5 进程终结进程终结l 进程终结的方式:进行自己完成析构,进行调用exit()返回 被信号中断时,被动终结l终结函数 do_exit()(定义于kernel/exit.c)与进程相关联的所有资源都被释放掉,进程不可运行处于EXIT_ZOMBIE退出状态。进程存在的唯一目的是向它的父进程提供信息。父进程检索到信息后,释放子进程资源,归还给系统使用。43l 删除进程描述符进程终止时所需的清理工作和进程描述符的删除被分开执行。在父进程获得已终结的子进程的信息后,或者通知内核它并不关注那些信息后,子进程的task_struct结构才被释放。Wait()通过系统调用wait4()实现,动作是挂起调用它的进程,直到其中的一个子进程退出,函数会返回该子进程的PID,调用该函数时提供的指针会包含子函数退出时的退出代码。44l 孤儿进程:父进程提前退出,子进程在退出时永远处于僵死状态。解决方法:子进程在当前线程组内找一个线程作为父亲,如果不行,让init做它们的父进程。l 实现:do_exit()调用exit_notify()调用forget_original_parent()调用find_new_reaper执行寻找父进程的过程。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服