Linux Shell命令行及腳本編程實(shí)例詳解課件:第13章 捕獲_第1頁
Linux Shell命令行及腳本編程實(shí)例詳解課件:第13章 捕獲_第2頁
Linux Shell命令行及腳本編程實(shí)例詳解課件:第13章 捕獲_第3頁
Linux Shell命令行及腳本編程實(shí)例詳解課件:第13章 捕獲_第4頁
Linux Shell命令行及腳本編程實(shí)例詳解課件:第13章 捕獲_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第13章

捕獲13.1信號在Linux中,理解信號的概念是非常重要的。這是因?yàn)椋盘柋挥糜谕ㄟ^Linux命令行所做的一些常見活動中。例如,每當(dāng)你按CTRL+C鍵來從命令行終結(jié)一個命令的執(zhí)行,你就使用了信號。每當(dāng)你使用如下命令來結(jié)束一個進(jìn)程時,你就使用了信號:$kill-9[PID]所以,至少知道信號的基本原理是非常有用的。這也就是本節(jié)我們要討論的內(nèi)容。13.1.1Linux中的信號在Linux系統(tǒng)(以及其它類Unix操作系統(tǒng))中,信號被用于進(jìn)程間的通訊。信號是一個發(fā)送到某個進(jìn)程或同一進(jìn)程中的特定線程的異步通知,用于通知發(fā)生的一個事件。從1970年貝爾實(shí)驗(yàn)室的Unix面世便有了信號的概念,而現(xiàn)在它已經(jīng)被定義在了POSIX標(biāo)準(zhǔn)中。對于在Linux環(huán)境進(jìn)行編程的用戶或系統(tǒng)管理員來說,較好地理解信號的概念和機(jī)制是很重要的,在某些情況下可以幫助我們更高效地編寫程序。對于一個程序來說,如果每條指令運(yùn)行正常的話,它會連續(xù)地執(zhí)行。但如果在程序執(zhí)行時,出現(xiàn)了一個錯誤或任何異常,內(nèi)核就可以使用信號來通知相應(yīng)的進(jìn)程。信號同樣被用于通訊、同步進(jìn)程和簡化進(jìn)程間通訊,在Linux中,信號在處理異常和中斷方面,扮演了極其重要的角色。信號已經(jīng)在沒有任何較大修改的情況下被使用了將近30年。13.1.1Linux中的信號在Linux系統(tǒng)(以及其它類Unix操作系統(tǒng))中,信號被用于進(jìn)程間的通訊。信號是一個發(fā)送到某個進(jìn)程或同一進(jìn)程中的特定線程的異步通知,用于通知發(fā)生的一個事件。從1970年貝爾實(shí)驗(yàn)室的Unix面世便有了信號的概念,而現(xiàn)在它已經(jīng)被定義在了POSIX標(biāo)準(zhǔn)中。對于在Linux環(huán)境進(jìn)行編程的用戶或系統(tǒng)管理員來說,較好地理解信號的概念和機(jī)制是很重要的,在某些情況下可以幫助我們更高效地編寫程序。對于一個程序來說,如果每條指令運(yùn)行正常的話,它會連續(xù)地執(zhí)行。但如果在程序執(zhí)行時,出現(xiàn)了一個錯誤或任何異常,內(nèi)核就可以使用信號來通知相應(yīng)的進(jìn)程。信號同樣被用于通訊、同步進(jìn)程和簡化進(jìn)程間通訊,在Linux中,信號在處理異常和中斷方面,扮演了極其重要的角色。信號已經(jīng)在沒有任何較大修改的情況下被使用了將近30年。13.1.1Linux中的信號當(dāng)一個事件發(fā)生時,會產(chǎn)生一個信號,然后內(nèi)核會將事件傳遞到接收的進(jìn)程。有時,進(jìn)程可以發(fā)送一個信號到其它進(jìn)程。除了進(jìn)程到進(jìn)程的信號外,還有很多種情況,內(nèi)核會產(chǎn)生一個信號,比如文件大小達(dá)到限額、一個I/O設(shè)備就緒或用戶發(fā)送了一個類似于CTRL+C或CTRL+Z的終端中斷等。運(yùn)行在用戶模式下的進(jìn)程會接收信號。如果接收的進(jìn)程正運(yùn)行在內(nèi)核模式,那么信號的執(zhí)行只有在該進(jìn)程返回到用戶模式時才會開始。13.1.1Linux中的信號發(fā)送到非運(yùn)行進(jìn)程的信號一定是由內(nèi)核保存,直到進(jìn)程重新執(zhí)行為止。休眠的進(jìn)程可以是可中斷的,也可以是不可中斷的。如果一個在可中斷休眠狀態(tài)的進(jìn)程(例如,等待終端輸入的進(jìn)程)收到了一個信號,那么內(nèi)核會喚醒這個進(jìn)程來處理信號。如果一個在不可中斷休眠狀態(tài)的進(jìn)程收到了一個信號,那么內(nèi)核會拖延此信號,直到該事件完成為止。13.1.1Linux中的信號當(dāng)進(jìn)程收到一個信號時,可能會發(fā)生以下三種情況:進(jìn)程可能會忽略此信號。有些信號不能被忽略,而有些沒有默認(rèn)行為的信號,默認(rèn)會被忽略。進(jìn)程可能會捕獲此信號,并執(zhí)行一個被稱為信號處理器的特殊函數(shù)。進(jìn)程可能會執(zhí)行信號的默認(rèn)行為。例如,信號15(SIGTERM)的默認(rèn)行為是結(jié)束進(jìn)程。當(dāng)一個進(jìn)程執(zhí)行信號處理時,如果還有其它信號到達(dá),那么新的信號會被阻斷直到處理器返回為止。13.1.2信號的名稱和值每個信號都有“SIG”開頭的名稱,并定義為唯一的正整數(shù)。在Shell命令行提示符下,輸入“kill-l”命令,將顯示所有信號的信號值和相應(yīng)的信號名。13.1.3Bash中的信號當(dāng)沒有任何捕獲時,一個交互式BashShell會忽略SIGTERM和SIGQUIT信號。由Bash運(yùn)行的非內(nèi)部命令會使用Shell從其父進(jìn)程繼承的信號處理程序。如果沒有啟用作業(yè)控制,異步執(zhí)行的命令會忽略除了有這些信號處理程序之外的SIGINT和SIGQUIT信號。由于命令替換而運(yùn)行的命令會忽略鍵盤產(chǎn)生的作業(yè)控制信號SIGTTIN、SIGTTOU和SIGTSTP。13.1.3Bash中的信號默認(rèn)情況下,Shell接收到SIGHUP信號后會退出。在退出之前,一個交互式的Shell會向所有的作業(yè),不管是正在運(yùn)行的還是已停止的,重新發(fā)送SIGHUP信號。對已停止的作業(yè),Shell還會發(fā)送SIGCONT信號以確保它能夠接收到SIGHUP信號。若要阻止Shell向某個特定的作業(yè)發(fā)送SIGHUP信號,可以使用內(nèi)部命令disown將它從作業(yè)表中移除,或是用“disown-h”命令仍阻止Shell向特定的作業(yè)發(fā)送SIGHUP信號,但并不會將特定的作業(yè)從作業(yè)表中移除。13.2進(jìn)程13.2.1什么是進(jìn)程進(jìn)程是運(yùn)行在Linux中的程序的一個實(shí)例。這是一個你之前就可能已經(jīng)聽說過的基本定義。當(dāng)你在Linux系統(tǒng)中執(zhí)行一個程序時,系統(tǒng)會為這個程序創(chuàng)建特定的環(huán)境。這個環(huán)境包含系統(tǒng)運(yùn)行這個程序所需的任何東西。每當(dāng)你在Linux中執(zhí)行一個命令,它都會創(chuàng)建,或啟動一個新的進(jìn)程。比如,當(dāng)你嘗試運(yùn)行命令“l(fā)s-l”來列出目錄的內(nèi)容時,你就啟動了一個進(jìn)程。如果有兩個終端窗口顯示在屏幕上,那么你可能運(yùn)行了同樣的終端程序兩次,這時會有兩個終端進(jìn)程。每個終端窗口可能都運(yùn)行了一個Shell,每個運(yùn)行的Shell都分別是一個進(jìn)程。當(dāng)你從Shell調(diào)用一個命令時,對應(yīng)的程序就會在一個新進(jìn)程中執(zhí)行,當(dāng)這個程序的進(jìn)程執(zhí)行完成后,Shell的進(jìn)程將恢復(fù)運(yùn)行。13.2.1什么是進(jìn)程操作系統(tǒng)通過被稱為PID或進(jìn)程ID的數(shù)字編碼來追蹤進(jìn)程。系統(tǒng)中的每一個進(jìn)程都有一個唯一的PID?,F(xiàn)在我們通過一個實(shí)例來了解Linux中的進(jìn)程。我們在Shell命令行下執(zhí)行如下命令:$sleep10&[1]3324因?yàn)槌绦驎却?0秒,所以我們快速地在當(dāng)前Shell上查找任何進(jìn)程名為sleep的進(jìn)程:$ps-ef|grepsleepyantaol33245712cons117:11:46/usr/bin/sleep我們看到進(jìn)程名為/usr/bin/sleep的進(jìn)程正運(yùn)行在系統(tǒng)中(其PID與我們在上一命令中得到的PID相同)。13.2.1什么是進(jìn)程現(xiàn)在,我們嘗試并行地從3個不同的終端窗口運(yùn)行上述的sleep命令,上述命令的輸出將類似如下所示:$ps-ef|grepsleepyantaol8965712cons117:16:51/usr/bin/sleepyantaol59245712cons117:16:52/usr/bin/sleepyantaol24245712cons117:16:50/usr/bin/sleep我們看到sleep程序的每一個實(shí)例都創(chuàng)建了一個單獨(dú)的進(jìn)程。每個Linux進(jìn)程還有另一個ID號碼,即父進(jìn)程的ID(ppid)。系統(tǒng)中的每一個用戶進(jìn)程都有一個父進(jìn)程。命令“ps-f”就會列出進(jìn)程的PID和PPID。此命令的輸出類似如下所示:$ps-fUIDPIDPPIDTTYSTIMECOMMANDyantaol4124228 cons0 21:37:09/usr/bin/psyantaol2281 cons0 21:32:23/usr/bin/bash13.2.1什么是進(jìn)程你在Shell命令行提示符下運(yùn)行的命令都把當(dāng)前Shell的進(jìn)程作為父進(jìn)程。例如,你在Shell命令行提示符下輸入ls命令,Shell將執(zhí)行l(wèi)s命令,此時Linux內(nèi)核會復(fù)制Shell的內(nèi)存頁,然后執(zhí)行l(wèi)s命令。在Unix中,每一個進(jìn)程是使用fork和exec方法創(chuàng)建的。然而,這種方法會導(dǎo)致系統(tǒng)資源的損耗。在Linux中,fork方法是使用寫時拷貝內(nèi)存頁實(shí)現(xiàn)的,所以它導(dǎo)致的僅是時間和復(fù)制父進(jìn)程的內(nèi)存頁表所需的內(nèi)存的損失,并且會為子進(jìn)程創(chuàng)建一個唯一的任務(wù)結(jié)構(gòu)。寫時拷貝模式在創(chuàng)建新進(jìn)程時避免創(chuàng)建不必要的結(jié)構(gòu)拷貝。例如,用戶在Shell命令行提示符下輸出ls命令,Linux內(nèi)核將會創(chuàng)建一個Shell的子進(jìn)程,即Shell的進(jìn)程是父進(jìn)程,而ls命令的進(jìn)程是子進(jìn)程,ls命令的進(jìn)程會指向與此Shell相同的內(nèi)存頁,然后子進(jìn)程使用寫時拷貝技術(shù)執(zhí)行l(wèi)s命令。13.2.2前臺進(jìn)程和后臺進(jìn)程當(dāng)你啟動一個進(jìn)程時(運(yùn)行一個命令),可以如下兩種方式運(yùn)行該進(jìn)程:前臺進(jìn)程后臺進(jìn)程默認(rèn)情況下,你啟動的每一個進(jìn)程都是運(yùn)行在前臺。它從鍵盤獲取輸入并發(fā)送它的輸出到屏幕。當(dāng)一個進(jìn)程運(yùn)行在前臺時,我們不能在同一命令行提示符下運(yùn)行任何其它命令(啟動任何其它進(jìn)程),因?yàn)樵诔绦蚪Y(jié)束它的進(jìn)程之前命令行提示符不可用。啟動一個后臺進(jìn)程最簡單的方法是添加一個控制操作符‘&’到命令的結(jié)尾(關(guān)于進(jìn)程在前臺和后臺之間切換的內(nèi)容,請參見4.3.3節(jié))。13.2.2前臺進(jìn)程和后臺進(jìn)程例如,如下命令將啟動一個后臺進(jìn)程:$sleep10&[1]5720$現(xiàn)在sleep命令被放在后臺運(yùn)行。當(dāng)Bash在后臺啟動一個作業(yè)時,它會打印一行內(nèi)容顯示作業(yè)編號([1])和進(jìn)程號(PID-5720)。當(dāng)作業(yè)完成時,作業(yè)會發(fā)送類似如下的信息到終端程序,來顯示此作業(yè)已完成,其內(nèi)容類似如下所示:[1]+Donesleep10將進(jìn)程放在后臺運(yùn)行的好處是:你可以繼續(xù)運(yùn)行其它命令,而不需要等待此進(jìn)程運(yùn)行完成再運(yùn)行其它命令。13.2.3進(jìn)程的狀態(tài)每個Linux進(jìn)程都有它自己的生命周期,比如,創(chuàng)建、執(zhí)行、結(jié)束和清除。每個進(jìn)程也都有各自的狀態(tài),顯示進(jìn)程中當(dāng)前正發(fā)生什么。進(jìn)程可以有如下幾種狀態(tài):D(不可中斷休眠狀態(tài))-進(jìn)程正在休眠并且不能恢復(fù),直到一個事件發(fā)生為止。R(運(yùn)行狀態(tài))-進(jìn)程正在運(yùn)行。S(休眠狀態(tài))-進(jìn)程沒有在運(yùn)行,而在等待一個事件或是信號。T(停止?fàn)顟B(tài))-進(jìn)程被信號停止,比如,信號SIGINT或SIGSTOP。Z(僵死狀態(tài))-標(biāo)記為<defunct>進(jìn)程是僵死的進(jìn)程,它們之所以殘留是因?yàn)樗鼈兊母高M(jìn)程適當(dāng)?shù)劁N毀它們。如果父進(jìn)程退出,這些進(jìn)程將被init進(jìn)程銷毀。13.2.3進(jìn)程的狀態(tài)若要查看指定進(jìn)程的狀態(tài),可以使用如下命令:$ps-CprocessName-opid=,cmd,stat例如:$ps-Csleep-opid=,cmd,statCMDSTAT9434sleep20S13.2.4實(shí)例:怎樣查看進(jìn)程通過前面章節(jié)的一些實(shí)例的學(xué)習(xí),想必你已經(jīng)知道了使用ps命令可以查看進(jìn)程的信息,但除了ps命令,我們還可以使用pstree命令和pgrep命令查看當(dāng)前進(jìn)程的信息。使用ps命令,可以查看當(dāng)前的進(jìn)程。默認(rèn)情況下,ps命令只會輸出當(dāng)前用戶并且是當(dāng)前終端(比如,當(dāng)前Shell)下調(diào)用的進(jìn)程的信息。13.2.5實(shí)例:向進(jìn)程發(fā)送信號我們可以使用鍵盤或pkill命令、kill命令和killall命令向進(jìn)程發(fā)送各種信號。在Bash下,我們可以使用鍵盤發(fā)送如下信號。組合鍵含義Ctrl+C中斷信號,發(fā)送SIGINT信號到運(yùn)行在前臺的進(jìn)程Ctrl+Y延時掛起信號,使運(yùn)行的進(jìn)程在嘗試從終端讀取輸入時停止。控制權(quán)返回給Shell,使用戶可以將進(jìn)程放在前臺或后臺,或殺掉該進(jìn)程Ctrl+Z掛起信號,發(fā)送SIGTSTP信號到運(yùn)行的進(jìn)程,由此將其停止,并將控制權(quán)返回給Shell13.2.5實(shí)例:向進(jìn)程發(fā)送信號大多數(shù)主流的Shell,包括Bash,都有內(nèi)置的kill命令。Linux系統(tǒng)中,也有kill命令,即/bin/kill。如果使用/bin/kill,則系統(tǒng)可能會激活一些額外的選項(xiàng),比如,殺掉不是你自己的進(jìn)程,或指定進(jìn)程名作為參數(shù),類似于pgrep和pkill命令。不過兩種kill命令默認(rèn)都是發(fā)送SIGTERM信號。當(dāng)準(zhǔn)備殺掉一個進(jìn)程或一連串的進(jìn)程時,我們的常識是嘗試發(fā)送最安全的信號開始,即SIGTERM信號。以這種方式,關(guān)心正常停止運(yùn)行的程序,當(dāng)它收到SIGTERM信號時,有機(jī)會按照已經(jīng)設(shè)計好的流程執(zhí)行,比如,清理和關(guān)閉打開的文件。如果你發(fā)送一個SIGKILL信號到進(jìn)程,你將消除進(jìn)程先清理而后關(guān)閉的機(jī)會,而這可能會導(dǎo)致不幸的結(jié)果。但如果一個有序地終結(jié)不管用,那么發(fā)送SIGINT或SIGKILL信號就可能是唯一的方法了。例如,當(dāng)一個前臺進(jìn)程使用Ctrl+C殺不掉時,那最好就使用命令“kill-9PID”了。13.2.5實(shí)例:向進(jìn)程發(fā)送信號kill命令可以發(fā)送多種信號到進(jìn)程。特別有用的信號包括:SIGHUP(1)SIGINT(2)SIGKILL(9)SIGCONT(18)SIGSTOP(19)在Bash中,信號名或信號值都可作為kill命令的選項(xiàng),而作業(yè)號或進(jìn)程號則作為kill命令的參數(shù)。13.2.6關(guān)于子Shell子Shell是由Shell或Shell腳本運(yùn)行的子進(jìn)程。當(dāng)你在Shell命令行提示符下,運(yùn)行一個Shell腳本時,它會創(chuàng)建一個叫做子Shell的新進(jìn)程,你的腳本將會使用這個子Shell來運(yùn)行。子Shell是命令處理程序(提供給你命令行提示符的Shell或是一個xterm窗口)的一個單獨(dú)實(shí)例。就像你的命令在命令行提示符下被解釋,類似地,腳本批處理一連串命令。實(shí)際上,每個運(yùn)行的Shell腳本都是父Shell的子進(jìn)程。Shell腳本可以自己啟動子進(jìn)程。這些子Shell讓腳本可以做并行處理,實(shí)際上是同時執(zhí)行多個子任務(wù)。13.3捕獲到目前為止,我們在本書所見的腳本中還沒有需要信號處理功能的,因?yàn)樗鼈兊膬?nèi)容相對比較簡單,執(zhí)行時間很短,而且不會創(chuàng)建臨時文件。而對于較大的或者更復(fù)雜的腳本來說,如果腳本具有信號處理機(jī)制可能就比較有用了。當(dāng)我們設(shè)計一個大且復(fù)雜的腳本時,考慮到當(dāng)腳本運(yùn)行時出現(xiàn)用戶退出或系統(tǒng)關(guān)機(jī)會發(fā)生什么,是很重要的。當(dāng)這樣的事件發(fā)生時,一個信號將會發(fā)送到所有受影響的進(jìn)程。相應(yīng)地,這些進(jìn)程的程序可以采取一些措施以確保程序正常有序地終結(jié)。比如說,我們編寫了一個會在執(zhí)行時生成臨時文件的腳本。在好的設(shè)計過程中,我們會讓腳本在執(zhí)行完成時刪除這些臨時文件。同樣聰明的做法是,如果腳本接收到了指示程序?qū)⑻崆敖Y(jié)束的信號,也應(yīng)刪除這些臨時文件。接下來,就讓我們開始學(xué)習(xí),如何在腳本中進(jìn)行這些處理。13.3.1trap語句Bash的內(nèi)部命令trap,讓我們可以在Shell腳本內(nèi)捕獲特定的信號并對它們進(jìn)行處理。trap命令的語法如下所示:$trapcommandsignal[signal…]上述語法中,command可以是一個腳本或是一個函數(shù)。signal即可以用信號名,也可以用信號值指定。你可以不指定任何參數(shù),而直接使用trap命令,它將會打印與每個要捕獲的信號相關(guān)聯(lián)的命令的列表。13.3.1trap語句當(dāng)Shell收到信號signal(s)時,command將被讀取和執(zhí)行。比如,如果signal是0或EXIT時,command會在Shell退出時被執(zhí)行。如果signal是DEBUG時,command會在每個命令后被執(zhí)行。signal也可以被指定為ERR,那么每當(dāng)一個命令以非0狀態(tài)退出時,command就會被執(zhí)行(注意,當(dāng)非0退出狀態(tài)來自一個if語句部分,或來自while、until循環(huán)時,command不會被執(zhí)行)。下面我們通過幾個簡單的實(shí)例來學(xué)習(xí)trap命令的用法。13.3.2實(shí)例:使用trap語句捕獲信號通過前面內(nèi)容的學(xué)習(xí),我們已經(jīng)知道,信號多用于以友好的方式結(jié)束一個進(jìn)程的執(zhí)行,既允許進(jìn)程在退出之前有機(jī)會做一些清理工作。然而,信號同樣還可用于其它用途。例如,當(dāng)終端窗口的大小改變時,在此窗口中運(yùn)行的Shell都會接收到信號SIGWINCH。通常,這個信號是被忽略的,但是,如果一個程序關(guān)心窗口大小的變化,它就可以捕獲這個信號,并用特定的方式處理它。注意:除SIGKILL信號以外,其它任何信號都可以被捕獲并通過調(diào)用C函數(shù)signal處理。接下來,我就以一個腳本為實(shí)例演示捕獲并處理SIGWINCH信號。13.3.3實(shí)例:移除捕獲如果我們在腳本中應(yīng)用了捕獲,我們通常會在腳本的結(jié)尾處,將接收到信號時的行為處理重置為默認(rèn)模式。重置(移除)捕獲的語法如下所示:$trap-signal[signal…]從上述語法中可以看出,使用破折號作為trap語句的命令參數(shù),就可以移除信號的捕獲。下面,我們以腳本trap_reset.sh為例,來學(xué)習(xí)如何在腳本中移除先前定義的捕獲。13.4小結(jié)下面我們總結(jié)一下本章所學(xué)的主要知識:在Linux系統(tǒng)和其它類Unix或Unix操作系統(tǒng)中,信號被用于進(jìn)程間的通訊。信號是一個發(fā)送到某個進(jìn)程或同一進(jìn)程中的特定線程的異步通知,用于通知發(fā)生的一個事件。在Linux中,信號在處理異常和中斷方面,扮演了極其重要的角色。當(dāng)一個事件發(fā)生時,會產(chǎn)生一個信號,然后內(nèi)核會將事件傳遞到接收的進(jìn)程。運(yùn)行在用戶模式下的進(jìn)程會接收信號。如果接收的進(jìn)程正運(yùn)行在內(nèi)核模式,那么信號的執(zhí)行只有在該進(jìn)程返回到用戶模式時才會開始。13.4小結(jié)當(dāng)進(jìn)程收到一個信號時,可能會發(fā)生以下三種情況:進(jìn)程可能會忽略此信號。有些信號不能被忽略,而有些沒有默認(rèn)行為的信號,默認(rèn)會被忽略。進(jìn)程可能會捕獲此信號,并執(zhí)行一個被稱為信號處理器的特殊函數(shù)。進(jìn)程可能會執(zhí)行信號的默認(rèn)行為。例如,信號15(SIGTERM)的默認(rèn)行為是結(jié)束進(jìn)程。在Shell命令行提示符下,輸入“kill-l”命令,可以顯示所有信號的信號值和相應(yīng)的信號名。由Bash運(yùn)行的非內(nèi)部命令會使用Shell從其父進(jìn)程繼承的信號處理程序。默認(rèn)情況下,Shell接收到SIGHUP信號后會退出。在退出之前,一個交互式的Shell會向所有的作業(yè),不管是正在運(yùn)行的還是已停止的,重新發(fā)送SIGHUP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論