




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章进程与任务或作业管理程序、进程、作业和任务的概念Linux操作系统的启动过程进程状态及转换进程调度、信号与软中断suid、sgid和sticky属性进程调度命令作业和任务管理图形界面下的进程管理第一页,共五十四页。6.1程序和进程的概念
操作系统的重要任务之一是使用户充分、有效地利用系统资源,也就是在系统资源一定或有限的情况下,要同时执行更多程序,高效率地完成更多的任务。进程、作业和任务调度是操作系统的重要任务之一。本章的主要内容是从系统的外部来观察系统中与进程(process)和作业(job)或任务(task)相关的行为,并实施某些控制让系统工作的更好,或按照用户的意图来完成指定工作。
第二页,共五十四页。6.1.1程序、进程、作业和任务
程序(program)是一个存储在存储介质上的文件。
进程(proccess)是一个程序的执行过程。作业(job)或任务(task)是用户需要计算机完成某项任务时要求计算机所做工作的集合,一个作业可能需要几个程序联合完成。作业和进程主要的区别与关系如下:作业是用户向计算机提交的任务实体;一个进程是作业或任务的某个执行过程;一个作业可由多个进程组成。
第三页,共五十四页。6.1.2三类进程
前台进程:是指用户直接控制的用于完成某个任务的进程,因此也叫终端交互式进程。它从标准输入读数据,向标准输出写数据,将错误信息输出到标准错误。也可以是用户直接交互控制的完成某种功能的程序。后台进程是指在系统后台运行的、不与用户交互进程。前台的进程也可放在后台运行,这时可能要用到输入输出的重定向。守候进程也叫服务器或精灵进程,它是后台进程的一种。
批处理进程是用户按照某种意图将一批作业和任务通过编程的方法提交给系统,让系统在某个合适的时间来调度和执行的进程。批处理进程是在某个shell程序的控制下解释执行的。
第四页,共五十四页。6.1.3Linux操作系统的启动
Linux的启动是通过加电和系统自检后,将主引导程序MBR装入内存并把控制权交给它。在MBR的控制下装入Linux的引导程序LBR并把控制权交给它。在LBR的控制下系统继续引导,核心装入内存。系统开始进一步的初始化过程:首先初始化系统内部数据结构(比如构造空闲缓冲区、初始化区表结构、页表项等),然后将根文件系统安装到根“/”下,并创建系统的0#进程、设置它的运行环境。至此内核启动完成。接着继续创建1#进程,然后由1#进程做进一步的初始化工作。
第五页,共五十四页。Linux操作系统的启动(续)1#进程继续初始化过程,按照/etc/inittab文件的内容和规定启动服务、管理进程,为每个终端生成一个子进程,等待用户在终端上注册,至此启动过程完毕。
第六页,共五十四页。6.1.40#进程与1#进程
在UNIX系统中0#进程是唯一只在核心态下执行的进程。它的功能有三:调度分配处理机;负责进程交换;初始化时创建1#进程。在Linux系统中,0#进程在创建出1#进程后,变成了空闲进程(Idler),当系统中没有其它进程就绪时运行。
1#(init)进程是系统启动时创建的创建进程的进程。它的主要作用是根据/etc/inittab的内容创建系统运行所需的进程。系统初始化完成后,1#进程了变成回收进程,专门领养没有父进程的孤儿进程或回收状态为ZOMBIE的僵尸进程。
第七页,共五十四页。Linux的进程树0#进程创建了1#进程,它是1#进程的父进程。1#进程在系统启动过程中创建了系统所需要的其它进程。而子进程又可创建属于自己的子进程。因此除0#进程外,1#进程是其它所有进程的祖先进程。第八页,共五十四页。6.1.5进程及运行模式
在UNIX/Linux系统中,进程可在用户态和核心态两种执行模式下执行。当用户进程需要系统核心提供服务而由用户态转向核心态执行时,需要依靠中断或陷阱机制来实现,这时要切换处理机(CPU)的工作状态。两种状态之间的主要区别是,核心态下的进程具有较高的优先级,能够存取核心和用户数据。而用户态下的进程能存取它自己的指令与数据,但不能存取核心指令和数据。第九页,共五十四页。6.1.6进程状态及转换
在操作系统中,一个CPU上同时只能运行一个进程,但在多用户、多任务环境下,从宏观上来讲,同时运行着很多进程,因此在这些正在运行着的进程中,在任一时刻只能有一个进程占有处理机而真正运行。也就是说众多运行着的进程中,它们宏观上是并行的,但微观上是串行的。因此就存在着有的进程在运行,有的进程在等待问题。事实上进程的状态远不只执行和等待两个,还有用户态执行、核心态执行、等待、睡眠、就绪等状态。
第十页,共五十四页。UNIX系统的进程状态及转换①进程在用户态运行。②进程在系统态运行。③就绪状态。④进程因等待资源而在内存中睡眠。⑤进程在外存中睡眠。⑥外存就绪。⑦进程从系统态返回。⑧进程刚被创建时的状态。⑨僵尸状态。第十一页,共五十四页。Linux系统的进程状态及转换①就绪状态(执行)②浅度睡眠③深度睡眠④停止状态⑤僵尸状态第十二页,共五十四页。6.2UNIX/Linux进程调度UNIX/Linux系统是分时系统,系统给每个进程分一个时间片,每个进程在自己的时间片内执行,当时间片结束时或从系统服务中返回时,动态计算进程的“优先级”,若有优先级高于当前进程的内存就绪态进程时,系统设置调度标识,并在以后某个时刻剥夺当前进程的执行权,而让优先级高的进程执行。
UNIX/Linux的进程调度按时间片计算“优先级”,并按“优先级”的高低来调度进程,使优先级高的进程占有处理机而得到执行。这里所说的“优先级”不是一个具体的数字或变量,而是一个衡量优先程度的指标。第十三页,共五十四页。6.2.1调度策略与优先级的计算
Linux把所有进程分成两类:实时进程和普通进程。对普通进程采用时间片轮转法来调度进程的执行,所有就绪进程按先后排成队列,依次轮转,时间片用完而未完成任务者排在尾部,如此往复;对于实时进程则采用FIFO和时间片轮转进行调度。最后经调度模块综合计算出各进程的优先级,优先级最高者获得执行权。第十四页,共五十四页。NiceLevel优先级在优先级计算过程中有一个基本参数参与运算,这就是传统UNIX/LinuxNiceLevel优先级,按传统做法,把它记为NICE。系统为每个进程设置了一个默认的NICE值(0),通过命令nice用户或管理员可以调整进程的NICE值,从而达到调整优先级的目的。在RedHatLinux9中它的调整范围为-20~19,在其它UNIX中,NICE取值范围可能与此不同。沿用UNIX的传统,NICE的值越大进程的优先级越低。NICE值可以被作为nice命令的参数来调试进程的优先级。
第十五页,共五十四页。6.2.2信号与软中断
Unix/Linux中使用很多信号,用于进程通信与控制。
进程通信时信号由主进程或系统或硬件等发送到目的进程,当目的进程收到信号后要进行相应的处理。若在目的进程在用户级执行,则收到信号后立即处理,若在内核级运行时,先将信号记下来,待返回到用户级时再处理。
用户可以向目的进程发送信号,而实现一定程度的通讯,完成指定的工作或达到某种指定的目的。用户可以对收到的信号采取系统指定的办法进行处理,也可采取自己的办法进行处理,也可忽略信号。第十六页,共五十四页。Linux系统的中断Linux系统常用的中断信号可用命令kill,killall和fuser来查询。如表6-1所示。在信号中,有的是硬件发出,比如SIGILL、SIGSEGV等,有的是可屏蔽的,比如SIGHUP、SIGQUIT等,而SIGKILL和SIGSTOP等是不可屏蔽。我们通常处理的只是一些软中断信号:名称值默认动作意义和功能描述SIGHUP1终止运行挂机或断线信号SIGINT2终止运行键盘收到Ctrl+CSIGQUIT3写出映像键盘收到退出Ctrl+\SIGKILL9终止运行KILL,不可屏蔽SIGTERM15同上进程终止信号第十七页,共五十四页。6.3进程管理与调度命令
可执行文件的setuid和setgid属性
可执行文件和目录的sticky属性查询进程状态(ps)
按名称终止进程的执行(killall)
确定使用指定文件或文件系统的进程(fuser)
让进程抗终止运行(nohup)
改变进程的优先级(nice)
进程挂起或作业的前/后运行切换第十八页,共五十四页。6.3.1可执行文件的setuid和setgid属性
在UNIX/Linux系统中,用户级别和执行权力是相关。但是有些工作,比如修改/etc/passwd和/etc/shadow文件等,对于普通用户都是必须的,因为它要修改密码。但是系统中这些文件对于普通用户是不允许有写操作的。于是就出现了普通用户通过某种机制行使超级用户权限的问题。
第十九页,共五十四页。1可执行文件的setuid和setgid属性
当一个程序具有suid属性时,它执行时的uid将是该程序所有者的uid—即有效uid,记为euid,而执行者的原来uid叫为真实uid,记为ruid。当一个程序具有sgid属性时,它执行时的gid将是该程序的gid—即有效gid,记为egid,而执行者的原来gid叫为真实gid,记为rgid。suid/sgid属性只对二进制可执行文件有效,对可执行的脚本文件无效。
第二十页,共五十四页。可执行文件的setuid和setgid属性(续)当一个属于超级用户的可执行二进制程序具有suid属性时,则当一般用户执行它时,也就相当于有了超级用户的身份和权限。同样当一个属于超级用户所在组的可执行二进制程序具有sgid属性时,则当一般用户执行它时,也就相当于有了该组员的身份和权限。suid和sgid权限的存在可能会给某些程序的执行带来了方便,因为权限被放大了,但这也是一种危险。因此设置这种权限的可执行二进制程序不宜太多。常用的设置suid的程序有:/bin/ping、/usr/bin/passwd、/usr/bin/newgrp、/usr/bin/sudo、/usr/sbin/suexec和/usr/sbin/traceroute第二十一页,共五十四页。setuid和setgid属性管理按照文件的属性,若用八进制表示,对应于suid和sgid的权限则为4000和2000。setuid和setgid属性设置1.数字方法:chmod4755myp1 #为myp1设置suidchmod2775myp2 #为myp2设置sgidchmod6777myp3 #为myp3同时设置suid和sgid2.字符方式chmodu+smyp1 #为myp1设置suidchmodg+smyp2 #为myp2设置sgidchmodug+smyp3 #为myp3同时设置suid和sgid修改后权限分别为:-rwsr-xr-x,-rwxrwsr-x和rwsrwsrwx
第二十二页,共五十四页。2.目录的sticky权限
UNIX/Linux系统允许目录使用sticky位属性(粘着位)。当一个目录设置了sticky位后,它内部的文件只能被文件主、目录主或超级用户删除、更名或移动。设置sticky位的目录有/tmp、/usr/tmp和/var/spool/uucppublic等。在传统的UNIX系统中sticky对可执行文件还具有特殊意义(略)。第二十三页,共五十四页。sticky权限管理sticky位是对目录执行权来说的,它的属性值为1000。sticky位也可用chmod命令通过root用户来设置。设有目录mydir的权限为drwxr-xr-x(755),则可通过以下两种方法来设置它的sticky位:chmod1755mydir #数字方式chmod+tmydir #字符方式。
设置后的权限为drwxr-xr-t或1755
第二十四页,共五十四页。6.3.2进程管理与调度命令
第二十五页,共五十四页。1.查询进程状态(ps)
功能:查询进程状态和信息,给出系统当前正在运行进程信息的快照。用法ps[options]
说明:ps支持多种UNIX系统格式的个性化显示方式。且参数较多;可以配合kill命令结束系统中失控或不必要的进程。第二十六页,共五十四页。ps参数-A,-e:显示系统内的所有进程; -a:显示所有与终端相关的进程A:显示当前终端的所有进程,也包括其它用户进程-c:显示CLS和PRI栏; c:列出进程名,但不包含路径名-Cpname:显示进程名字为pname的同名进程信息-f:显示进程信息时显示带有路径的进程名和进程参数F:用ASCII字符显示树状结构的进程间关系g,-g/-Ggid:显示与进程组相关的信息,gid可以是组名或组号H:不显示标题; -H:显示树状结构以表示进程间的关系J,-j:以作业控制方式显示进程信息;l,-l:以长格式显示进程信息L:显示标题栏目信息; p/-ppids:显示指定进程的信息T,t/-ttty:显示终端相关进程信息,T只能用于显示当前终端进程信息u,U/-Uuid:显示与用户相关的信息,uid可以是用户名或用户号。X:显示所有进程信息,不区分终端第二十七页,共五十四页。进程的状态
R:Runable,进程在执行中D:Dlaying,非中断性睡眠,通常是因为等待I/OS:Sleep,正在睡眠T:Tracedorstopped,被跟踪或停止;Z:Zombie,僵尸状态。进程已经终止,但父进程没有对它的结束作适当处理W:Wait,无内存页面(被换出)N:低优先级进程L:Locked,页面被锁进内存(用于实时控制或用户控制的I/O)<:高优先级进程第二十八页,共五十四页。ps使用示例
#查询与终端(tty1)相关的进程信息ps-ttty1#查询与用户(gjshao)相关的信息ps–f–ugjshao#查询整个系统内的进程信息情况
ps–axj第二十九页,共五十四页。按名称终止进程的执行(killall)
功能:killall是另一个用来终止程序的命令,它不像kill使用进程的PID作为操作对象,而是使用进程名。用法:killall[-e][-g][-i][-q][-v][-w][-V][-ssignal][--]name…killall-l说明:killall发送的信号可以是信号的名或值。
由于在系统可能有同名进程运行,因此使用killall终止进程时可能会有扩大化的倾向。第三十页,共五十四页。参数与示例参数:name:进程名,被终止的对象-g:终止指定所属组内的所有进程-i:交互式工作,终止进程前需要用户确认-l:列可用信号-q:安静模式,当不存在指定进程时也不报错-s:指定信号(参见-l参数)-v:报告信号是否发送成功-w:等待所有被杀进程结束。若被杀进程忽略发送信号或处于僵尸状态会造成killall无限等待示例:killall-l #查询可用信号killallman #终止所有名为man的进程第三十一页,共五十四页。3.确定使用指定文件或文件系统的进程(fuser)
功能:确定使用指定文件或文件系统的进程用法:fuser[-a|-s][-nnamespace][-signal][-kimuv]name...fuser–l说明:在fuser的默认输出中,进程号的后面可以跟有c、e、f、r、m等字符,意义如下:c:当前目录;e:进程正在执行;f:打开文件,默认情况下不输出此标志;r:根目录;m:内存映像文件或共享库。
第三十二页,共五十四页。fuser的参数参数:-k:终止所有使用设备或文件系统的进程-i:在杀死进程前提示确认,若无-k则忽略此参数-l:列所使用的信号名; -m:安装的文件系统-nnamespace:在指定名字空间内搜索,名字空间可是文件、UDP和TCP等-s:安静模式; -u:显示用户信息-signal:指定信号,而非默认的SIGKILL-4/-6:只搜索IP4/IP6的sockets信息。默认搜索两者第三十三页,共五十四页。fuser使用示例示例:1)杀死所有使用某设备(tty5)的进程
fuser–k/dev/tty5
2)显示使用本地网络端口的进程
#监视本地telnet和ftp端口的tcp活动情况fusertelnet/tcp#监视本地telnet和ftp端口的tcp活动情况fuser–u23/tcp21/tcp
#监视本地ftp端口的tcp活动情况
#fuser–ntcp21第三十四页,共五十四页。4.让进程抗终止运行(nohup)
原理:在UNIX/Linux环境下进程可在前台运行,也可在后台运行。但不论哪种情况,只要启动进程的用户退出了,他创建的所有进程都将终止。这是因为当用户退出时,它启动的所有进程都将收到HUP信号。按照系统规定,收到HUP信号的进程都将被终止。为了保证用户退出后,它启动的后台进程仍能继续运行,就要求进程对信号HUP具有免疫能力。
功能:nohup启动的进程对信号HUP就具有免疫力
用法:nohupcommand[arguments]
第三十五页,共五十四页。nohup说明后台进程是不能和终端交互的,如果被执行的命令的输出没有重定向,它将输出追加到当前目录的nohup.out文件。如果当前目录的nohup.out没有写权限,输出将被重定向到$HOME/nohup.out。如果两者均无写权限,则命令不能执行。如果有写权限且nohup不存在,则将创建之,在创建时不对同组和其它人赋访问权。若文件已经存在则不改变原文件的存取权限。程序的未重定向的标准错误也将追加到nohup.out文件。nohup不能直接创建后台进程,创建后台进程应在回车前添加“&”符号。可以通过返回值来确定执行情况:126-命令不能执行;127-命令找不到;其它-所执行命令的返回值。
第三十六页,共五十四页。5.改变进程的优先级(nice)
功能:通过它可以改变进程NICE值,从而改变进程的优先级。用法:nice[options][cmd[arg…]]
参数:-n<NICE>:例如:-n5,NICE=5,-n-5,NICE=-5-<NICE>:例如:-5,NICE=5,--5,NICE=-5--adjustment=<NICE> :例如:--adjustment=5,NICE=5第三十七页,共五十四页。nice说明及示例说明:对于哪些不急迫的任务,可以通过调高它的NICE值,来降低它的优先级,以保证紧急任务的执行。当不带参数或变量运行nice时,将显示默认的NICE,如果用nice对某个进程进行操作,而没有指定NICE,则将NICE设置为10,从而降低了优先级。如果要设置负的NICE,而提高进程的优先级,则要求用户必须具有超级用户权限。
使用示例:nicemyp& #以默认优先数(10)降低运行级nice–15myp& #以15为优先数运行程序nice–n-19myp& #以-19为优先数运行程序ps–l #查询进程运行级和NICE值(PRI和NI列)第三十八页,共五十四页。6.进程挂起或作业的前/后运行切换当一个交互式进程正在运行时,用户可以通过Ctrl+Z暂停其当前执行,而将它挂起,放在后台等待运行,也可让其在后台或再重新回到前台运行。实现这些功能的命令是fg和bg,还有jobs命令用于作业队列查询和管理。它们都是bash的内部命令。基本用法:fg[job] #让挂起进程到前台运行bg[job] #让挂起进程到后台运行jobs[options][job…]#显示作业队列第三十九页,共五十四页。使用示例设用户正在运行manbash,此时可以通过Ctrl+Z将其挂起,屏幕显示以下信息并出现提示符:[1]+stoppedmanbash表明名为man的进程被挂起,作业编号为1,+表示此为当前作业,用户可以在提示符下继续工作。再启动一个进程bc进入交互界面,同样可以通过Ctrl+Z将bc挂起[2]+stoppedbc系统回到提示符。运行jobs命令可得以下输出:[1]-stoppedmanbash[2]+stoppedbc有两个作业,编号分别为1和2,2为当前作业。
第四十页,共五十四页。使用示例(续)此时可以通过命令:fg[job] 或 bg[job]将作业调到前台或放在后台运行,job为jobs命令列出的作业号,比如1,2等。例如输入fg 或 fg2将使bc调到前台执行,而输入fg1将使作业man调到前台执行。同样输入bg1也可使man命令在后台运行,此时系统提示:[1]-manbash&表明man命令已在后台运行,但是对于交互式任务在后台运行是没有意义的。
第四十一页,共五十四页。6.4作业和任务调度
在UNIX/Linux系统中除使用相关命令,可对正在运行的程序进行管理和控制外,还有相关命令用于对作业进行调度,以规定在指定时刻调度或安排任务的执行。我们可以把有些不急于处理的任务,放在系统的负载小的或非峰值时间执行,也可以让系统在无用户使用或用户最少的时候重新启动,以保证系统运行的效率。用于作业管理的命令有at,batch和crontab。
第四十二页,共五十四页。6.4.1at和batch
功能是在某指定时间调度命令的执行
用法at[-V][-ffile][-qqueue][-mldbv]timeat-cjob…batch[-V][-ffile][-qqueue][-mv][time]参数batch是一个shell编写的程序,它通过at提交批处理作业,其用法与at相同。at和batch为作业提交的客户端程序,由at和batch提交的作业由atd调度执行。
第四十三页,共五十四页。参数-cjob:将指定作业信息显示到标准输出-djob:删除指定作业-l:列出队列中的作业-ffile:从文件file中读取作业,而非从标准输入,也可以用输入改道的办法实现-m:作业完成后向用户发送邮件,在作业没有输出和错误时也是这样-qqueue:处理指定作业队列。在RedHatLinux9中以单个字符表示作业队列,默认情况是:a表示at队列,b表示batch队列,=表示正在的作业第四十四页,共五十四页。说明at从标准输入上读入命令或从指定文件中读取命令并在以后指定的时间调度它们的执行。at可以接受HH:MM或HHMM形式的时间,默认日期为当天,若在当天时间已过,则为下一天,时间还可以跟后缀AM和PM,否则将视为24小时制。也可设定today、tomorrow、midnight、noon、teatime(4pm)。可同时指定时间和日期,日期必须跟在时间的后面,格式为:(1)英文月名数字日期[数字年];(2)MMDDYY;(3)MM/DD/YY;(4)DD.MM.YY。
也可以“当前时间+依偏移量”的办法指定执行时间,偏移量可以是分钟、小时、天或周等。例如:now+2minutes,10:22+3days等。如果在作业操作中未使用I/O重定向,则在作业执行过程中产生的标准错误和标准输出将以邮件的形式发给用户。
第四十五页,共五十四页。/etc/at.allow和/etc/at.deny超级用户可以无条件使用at命令,对于一般用户能否使用at要根据文件/etc/at.allow和/etc/at.deny来确定。at.allow、at.deny文件的结构为每行一个用户的列表,且不允许出现白空格。如果at.allow存在,则其中的用户将被允许使用at。若at.allow不存在,则检查at.deny,其中的用户将不允许使用at。空的at.deny意为每个用户均可使用at。如果at.allow和at.deny均不存在,则只有超级用户能使用at命令。相关的文件还有/var/spool/at和/var/spool/at/spool。
第四十六页,共五十四页。作业调试示例(1)作业创建at1200<myjobat12:01-fmyjobbatch1202-fmyjob1at1203#标准输入读取作业,并在12:03执行at>ls-l>/tmp/`whoami.a #进入at界面,输入命令at>Ctrl+D #输入Ctrl+D结束作业输入at><EOF> #at显示此行内容,并覆盖Ctrl+D所在的行(2)列出已提交的作业at–l(3)删除已提交的作业at-d2325#23,25为at-l的输出中的作业号第四十七页,共五十四页。6.4.2crontab
at和batch提交的作业是一次性的,而crontab提交的作业可以是永久性的,当crontab被制定好之后,在下一次被修改之前crond将一直按其内容的规定调度程序的执行。crontab的功能是规划程序的定时启动、定时执行。crontab是一个客户端程序,用于编辑crontab文件,该文件中按一定格式规定程序的启动。crontab提交的任务由服务器程序crond调度。cron还有按时、日、周和月调试执行的任务。
第四十八页,共五十四页。1.功能与用法
功能:规划程序的定时启动、定时执行
用法:crontab[-uuser]filecrontab[-uuser]{-e|-l|-r}参数:file:指定crontab文件;-e:编辑crontab文件-l:列crontab文件内容;-r:删除crontab文件-uuser:指定用户的crontab文件说明:当使用crontab时,系统为每个用户准备一个/var/spool/cron/username第四十九页,共五十四页。crontab文件的内容crontab文件中,#开始的行为注释行,除注释行外的每一有效行由六个用空格分隔的域组成:Minutehourdayofmonthmonthdayofweekcmd前面5个域是数字,分别是:分钟(0-59),时(0-23),月日期(1-31),月(1-12),也可以是英文月份名字)和周日期(0-6,0表示星期天)。他们可以是以下形式:
数字;由-连接的两个数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20244-2025光学纤维传像元件
- GB/T 22474-2025果蔬、花卉酱质量通则
- 茶艺师对茶叶的认识试题及答案
- 2025年茶艺师天赋素养试题及答案
- 茶艺师考试实践环节的试题及答案
- 从事茶艺行业的前景解析试题及答案
- 妇幼保健员考试科研支持试题及答案2025
- 妇幼保健员照护技能考察试题及答案
- 2025年度生物制药干股入股合作协议书
- 2025年度洗浴中心员工职业成长支持雇佣合同
- 特别国债资金管理办法
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- 招投标代理公司内部监督管理制度
- 知识库管理规范大全
- 2024年天津市专业技术人员继续教育公需课考试题+答案 (四套全)
- “江格尔”的数字化保护与再生研究的开题报告
- 设计方案新能源汽车充电桩设计
- (高清版)DZT 0432-2023 煤炭与煤层气矿产综合勘查规范
- 幼儿园课题研究实施方案及流程
- 武汉中考理化生实验备考试题库(含答案)
- 2024年WPS计算机二级考试题库350题(含答案)
评论
0/150
提交评论