• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

             首頁 > 專欄

            實驗一操作系統Windows“任務管理器”的進程管理

            更新時間:2024-03-02 09:32:30 閱讀: 評論:0

            2024年3月2日發(作者:里的組詞有哪些)

            實驗一操作系統Windows“任務管理器”的進程管理

            3.1 Windows“任務管理器”的進程管理

            (實驗估計時間:60分鐘)

            ?

            ?

            ?

            ?

            ?

            背景知識

            ?

            實驗目的

            ?

            工具/準備工作

            ?

            實驗內容與步驟

            背景知識

            Windows 2000的任務管理器提供了用戶計算機上正在運行的程序和進程的相關信息,也顯示了最常用的度量進程性能的單位。使用任務管理器,可以打開監視計算機性能的關鍵指示器,快速查看正在運行的程序的狀態,或者終止已停止響應的程序。也可以使用多個參數評估正在運行的進程的活動,以及查看CPU 和內存使用情況的圖形和數據。其中:

            1) “應用程序”選項卡顯示正在運行程序的狀態,用戶能夠結束、切換或者啟動程序。

            2) “進程”選項卡顯示正在運行的進程信息。例如,可以顯示關于CPU 和內存使用情況、頁面錯誤、句柄計數以及許多其他參數的信息。

            3) “性能”選項卡顯示計算機動態性能,包括CPU 和內存使用情況的圖表,正在運行的句柄、線程和進程的總數,物理、核心和認可的內存總數 (KB) 等。實驗目的

            通過在Windows 任務管理器中對程序進程進行響應的管理操作,熟悉操作系統進程管理的概念,學習觀察操作系統運行的動態性能。工具/準備工作

            在開始本實驗之前,請回顧教科書的相關內容。

            需要準備一臺運行Windows 2000 Professional操作系統的計算機。實驗內容與步驟

            1. 使用任務管理器終止進程

            2. 顯示其他進程計數器

            3. 更改正在運行的程序的優先級

            啟動并進入Windows環境,單擊Ctrl + Alt + Del鍵,或者右鍵單擊任務欄,在快捷菜單中單擊“任務管理器”命令,打開“任務管理器”窗口。

            在本次實驗中,你使用的操作系統版本是:

            _windowsXP

            當前機器中由你打開,正在運行的應用程序有:

            1)實驗一-microsoft word

            2)操作系統電子書

            3) Microsoft word_

            4) _ftp://172.16.20.168/_

            5) __百度搜索—-qq空間-windows internet__

            Windows“任務管理器”的窗口由__4___個選項卡組成,分別是:

            1) 應用程序__

            2) __進程_____

            3) __性能

            4) 聯網

            當前“進程”選項卡顯示的欄目分別是 (可移動窗口下方的游標/箭頭,或使窗口最大化進行觀察) :

            1) ________________________________________________________

            2) ____________________________________________________

            3) _________________________________________________

            4) _________________________________________________________

            5) ____________________________________________________________

            6) ________________________________________________________

            7) ____________________________________________________________

            8) __________________________________________________________

            1. 使用任務管理器終止進程

            步驟1:單擊“進程”選項卡,一共顯示了__40____個進程。請試著區分一下,其中:

            系統 (SYSTEM) 進程有___25___個,填入表3-1中。

            映像名稱 用戶名 CPU 內存使用

            System

            Idle

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            00

            00

            00

            5376k

            300k

            856k

            50

            00

            00

            00

            00

            00

            00

            00

            00

            99

            00

            00

            00

            00

            284k

            924k

            7412k

            4144k

            6632k

            4340k

            3840k

            404k

            300k

            28k

            1684k

            5776k

            1100k

            5324k

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            SYSTEM

            00

            00

            00

            00

            00

            00

            00

            00

            3920k

            18716k

            10608k

            2460k

            6880k

            9148k

            5688k

            3416k

            表3-1 實驗記錄

            服務 (SERVICE) 進程有___4___個,填入表3-2中。

            表3-2 實驗記錄

            映像名稱 用戶名 CPU 內存使用

            NETWORK

            SERVICE

            NETWORK

            SERVICE

            NETWORK

            SERVICE

            LOCAL

            SERVICE

            00

            00

            00

            00

            5692k

            2628k

            4076k

            4408k

            用戶進程有___12___個,填入表3-3中。

            表3-3 實驗記錄

            映像名稱 用戶名 CPU 內存使用

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            Administrator

            00

            00

            00

            00

            00

            00

            00

            00

            00

            02

            10468k

            10836k

            3576k

            3296k

            32428k

            34056k

            6700k

            6072k

            2408k

            300300k

            Administrator

            Administrator

            00

            00

            6148k

            13256k

            提示:在Windows XP的“任務管理器”中,“進程”選項卡增加了一個“用戶名”欄目,其中區分了SYSTEM、NETWORK SERVICE、LOCAL SERVICE和用戶的不同進程類別。

            步驟2:單擊要終止的進程,然后單擊“結束進程”按鈕。

            注意:終止進程時要小心。終止進程有可能導致不希望發生的結果,包括數據丟失和系統不穩定等。因為在被終止前,進程將沒有機會保存其狀態和數據。如果結束應用程序,您將丟失未保存的數據。如果結束系統服務,系統的某些部分可能無法正常工作。

            終止進程,將結束它直接或間接創建的所有子進程。例如,如果終止了電子郵件程序 (如Outlook 98) 的進程樹,那么同時也終止了相關的進程,如MAPI后臺處理程序。

            請將終止某進程后的操作結果與原記錄數據對比,發生了什么:

            ___________________ SYSTEM 00 2792k___________

            __________________結束進程后消失________________________________________

            ________________________________________________________________________

            ________________________________________________________________________

            2. 顯示其他進程記數器

            在“進程”選項卡上單擊“查看”菜單,然后單擊“選擇列”命令。單擊要增加顯示為列標題的項目,然后單擊“確定”。

            為對進程列表進行排序,可在“進程”選項卡上單擊要根據其進行排序的列標題。而為了要反轉排序順序,可再次單擊列標題。

            經過調整,“進程”選項卡現在顯示的項目分別是:

            __印像名稱 用戶名 CPU 內存使用 USER… I/O寫…

            _______________________________________________________________________

            ________________________________________________________________________

            通過對“查看”菜單的選擇操作,可以在“任務管理器”中更改顯示選項:

            · 在“應用程序”選項卡上,可以按詳細信息、大圖標或小圖標查看。

            · 在“性能”選項卡上,可以更改CPU記錄圖,并顯示內核時間。“顯示內核時間”選項在“CPU使用”和“CPU使用記錄”圖表上添加紅線。紅線指示內核操作占用的CPU資源數量。

            3. 更改正在運行的程序的優先級

            要查看正在運行的程序的優先級,可單擊“進程”選項卡,單擊“查看”菜單,單擊“選擇列”-“基本優先級”命令,然后單擊“確定”按鈕。

            為更改正在運行的程序的優先級,可在“進程”選項卡上右鍵單擊您要更改的程序,指向“設置優先級”,然后單擊所需的選項。

            更改進程的優先級可以使其運行更快或更慢 (取決于是提升還是降低了優先級) ,但也可能對其他進程的性能有相反的影響。

            記錄操作后所體會的結果:

            __________本次試驗總體較簡單,但是有些煩雜但依然讓我學會了很多東西。___

            ________________________________________________________________________

            ________________________________________________________________________

            ________________________________________________________________________

            ________________________________________________________________________

            在多處理器計算機上,用戶還可以給處理器指派進程,將程序或進程的執行限制在選定的處理器上,但這有可能導致總體性能的下降。

            3.3 Windows 2000進程的“一生”

            (實驗估計時間:120分鐘)

            ?

            ?

            ?

            ?

            ?

            背景知識

            ?

            實驗目的

            ?

            工具/準備工作

            ?

            實驗內容與步驟

            背景知識

            1. 創建進程

            2. 正在運行的進程

            3. 終止進程

            Windows所創建的每個進程都從調用CreateProcess() API函數開始,該函數的任務是在對象管理器子系統內初始化進程對象。每一進程都以調用ExitProcess() 或TerminateProcess()

            API函數終止。通常應用程序的框架負責調用 ExitProcess() 函數。對于C++ 運行庫來說,這一調用發生在應用程序的main() 函數返回之后。

            1. 創建進程

            CreateProcess() 調用的核心參數是可執行文件運行時的文件名及其命令行。表 3-4詳細地列出了每個參數的類型和名稱。

            表3-4 CreateProcess() 函數的參數

            參數名稱

            LPCTSTR

            lpApplivationName

            LPCTSTR

            lpCommandLine

            LPSECURIITY_ATTRIBUTES lpProcessAttributes

            LPSECURIITY_ATTRIBUTES lpThreadAttributes

            BOOL bInheritHandle

            DWORD

            dwCreationFlage

            LPVOID lpEnvironment

            LPCTSTR

            lpCurrentDirectory

            STARTUPINFO

            lpStartupInfo 情

            使用目的

            全部或部分地指明包括可執行代碼的EXE文件的文件名

            向可執行文件發送的參數

            返回進程句柄的安全屬性。主要指明這一句柄是否應該由其他子進程所繼承

            返回進程的主線程的句柄的安全屬性

            一種標志,告訴系統允許新進程繼承創建者進程的句柄

            特殊的創建標志 (如CREATE_SUSPENDED) 的位標記

            向新進程發送的一套環境變量;如為null值則發送調用者環境

            新進程的啟動目錄

            STARTUPINFO結構,包括新進程的輸入和輸出配置的詳

            LPPROCESS_INFORMATION lpProcessInformation ID

            調用的結果塊;發送新應用程序的進程和主線程的句柄和

            可以指定第一個參數,即應用程序的名稱,其中包括相對于當前進程的當前目錄的全路徑或者利用搜索方法找到的路徑;lpCommandLine參數允許調用者向新應用程序發送數據;接下來的三個參數與進程和它的主線程以及返回的指向該對象的句柄的安全性有關。

            然后是標志參數,用以在dwCreationFlags參數中指明系統應該給予新進程什么行為。經常使用的標志是CREATE_SUSPNDED,告訴主線程立刻暫停。當準備好時,應該使用ResumeThread() API來啟動進程。另一個常用的標志是CREATE_NEW_CONSOLE,告訴新進程啟動自己的控制臺窗口,而不是利用父窗口。這一參數還允許設置進程的優先級,用以向系統指明,相對于系統中所有其他的活動進程來說,給此進程多少CPU時間。

            接著是CreateProcess() 函數調用所需要的三個通常使用缺省值的參數。第一個參數是lpEnvironment參數,指明為新進程提供的環境;第二個參數是lpCurrentDirectory,可用于向主創進程發送與缺省目錄不同的新進程使用的特殊的當前目錄;第三個參數是STARTUPINFO數據結構所必需的,用于在必要時指明新應用程序的主窗口的外觀。

            CreateProcess() 的最后一個參數是用于新進程對象及其主線程的句柄和ID的返回值緩沖區。以PROCESS_INFORMATION結構中返回的句柄調用CloHandle() API函數是重要的,因為如果不將這些句柄關閉的話,有可能危及主創進程終止之前的任何未釋放的資源。

            2. 正在運行的進程

            如果一個進程擁有至少一個執行線程,則為正在系統中運行的進程。通常,這種進程使用主線程來指示它的存在。當主線程結束時,調用ExitProcess() API函數,通知系統終止它所擁有的所有正在運行、準備運行或正在掛起的其他線程。當進程正在運行時,可以查看它的許多特性,其中少數特性也允許加以修改。

            首先可查看的進程特性是系統進程標識符 (PID) ,可利用GetCurrentProcessId() API函數來查看,與GetCurrentProcess() 相似,對該函數的調用不能失敗,但返回的PID在整個系統中都可使用。其他的可顯示當前進程信息的API函數還有GetStartupInfo()和GetProcessShutdownParameters() ,可給出進程存活期內的配置詳情。

            通常,一個進程需要它的運行期環境的信息。例如API函數GetModuleFileName() 和GetCommandLine() ,可以給出用在CreateProcess() 中的參數以啟動應用程序。在創建應用程序時可使用的另一個API函數是IsDebuggerPrent() 。

            可利用API函數GetGuiResources() 來查看進程的GUI資源。此函數既可返回指定進程中的打開的GUI對象的數目,也可返回指定進程中打開的USER對象的數目。進程的其他性能信息可通過GetProcessIoCounters()、GetProcessPriorityBoost() 、GetProcessTimes() 和GetProcessWorkingSetSize() API得到。以上這幾個API函數都只需要具有PROCESS_QUERY_INFORMATION訪問權限的指向所感興趣進程的句柄。

            另一個可用于進程信息查詢的API函數是GetProcessVersion() 。此函數只需感興趣進程的PID (進程標識號) 。本實驗程序清單3-6中列出了這一API函數與GetVersionEx() 的共同作用,可確定運行進程的系統的版本號。

            3. 終止進程

            所有進程都是以調用ExitProcess() 或者TerminateProcess() 函數結束的。但最好使用前者而不要使用后者,因為進程是在完成了它的所有的關閉“職責”之后以正常的終止方式來調用前者的。而外部進程通常調用后者即突然終止進程的進行,由于關閉時的途徑不太正常,有可能引起錯誤的行為。

            TerminateProcess() API函數只要打開帶有PROCESS_TERMINATE訪問權的進程對象,就可以終止進程,并向系統返回指定的代碼。這是一種“野蠻”的終止進程的方式,但是有

            時卻是需要的。

            如果開發人員確實有機會來設計“謀殺”(終止別的進程的進程) 和“受害”進程 (被終止的進程) 時,應該創建一個進程間通訊的內核對象——如一個互斥程序——這樣一來,“受害”進程只在等待或周期性地測試它是否應該終止。實驗目的

            1) 通過創建進程、觀察正在運行的進程和終止進程的程序設計和調試操作,進一步熟悉操作系統的進程概念,理解Windows 2000進程的“一生”。

            2) 通過閱讀和分析實驗程序,學習創建進程、觀察進程和終止進程的程序設計方法。

            工具/準備工作

            在開始本實驗之前,請回顧教科書的相關內容。

            需要做以下準備:

            1) 一臺運行Windows 2000 Professional操作系統的計算機。

            2) 計算機中需安裝Visual C++ 6.0專業版或企業版。實驗內容與步驟

            1. 創建進程

            2. 正在運行的進程

            3. 終止進程

            請回答:

            Windows所創建的每個進程都是以調用___________CreateProcess()_________API函數開始和以調用____ ExitProcess()_______ 或 ______

            TerminateProcess()________ API函數終止。

            1. 創建進程

            本實驗顯示了創建子進程的基本框架。該程序只是再一次地啟動自身,顯示它的系統進程ID和它在進程列表中的位置。

            步驟1:登錄進入Windows 2000 Professional。

            步驟2:在“開始”菜單中單擊“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual

            C++ 6.0”命令,進入Visual C++窗口。

            步驟3:在工具欄單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序。

            清單3-5 創建子進程

            // proccreate項目

            # include

            # include

            # include

            // 創建傳遞過來的進程的克隆過程并賦于其ID值

            void StartClone(int nCloneID)

            {

            // 提取用于當前可執行文件的文件名

            TCHAR szFilename[MAX_PATH] ;

            :: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

            // 格式化用于子進程的命令行并通知其EXE文件名和克隆ID

            TCHAR szCmdLine[MAX_PATH] ;

            :: sprintf(szCmdLine, “”%s” %d”, szFilename, nCloneID) ;

            // 用于子進程的STARTUPINFO結構

            STARTUPINFO si;

            :: ZeroMemory(reinterpret_cast (&si) , sizeof(si) ) ;

            = sizeof(si) ; // 必須是本結構的大小

            // 返回的用于子進程的進程信息

            PROCESS_INFORMATION pi;

            // 利用同樣的可執行文件和命令行創建進程,并賦于其子進程的性質

            BOOL bCreateOK = :: CreateProcess(

            szFilename, // 產生這個EXE的應用程序的名稱

            szCmdLine, // 告訴其行為像一個子進程的標志

            NULL, // 缺省的進程安全性

            NULL, // 缺省的線程安全性

            FALSE, // 不繼承句柄

            CREATE_NEW_CONSOLE, // 使用新的控制臺

            NULL, // 新的環境

            NULL, // 當前目錄

            &si, // 啟動信息

            &pi) ; // 返回的進程信息

            // 對子進程釋放引用

            if (bCreateOK)

            {

            :: CloHandle(ss) ;

            :: CloHandle(d) ;

            }

            }

            int main(int argc, char* argv[] )

            {

            // 確定進程在列表中的位置

            int nClone(0) ;

            if (argc > 1)

            {

            // 從第二個參數中提取克隆ID

            :: sscanf(argv[1] , “%d” , &nClone) ;

            }

            // 顯示進程位置

            std :: cout << “Process ID: “ << :: GetCurrentProcessId()

            << “, Clone ID: “ << nClone

            << std :: endl;

            // 檢查是否有創建子進程的需要

            const int c_nCloneMax = 25;

            if (nClone < C_nCloneMax)

            {

            // 發送新進程的命令行和克隆號

            StartClone(++nClone) ;

            }

            // 在終止之前暫停一下 (l/2秒)

            :: Sleep(500) ;

            return 0;

            }

            步驟4:單擊“Build”菜單中的“Compile ”命令,系統顯示:

            This build command requires an active project workspace. Would you like to

            create a default project workspace ?

            (build命令需要一個活動的項目工作空間。你是否希望建立一個缺省的

            項目工作空間?)

            單擊“是”按鈕確認。系統對進行編譯。

            步驟5:編譯完成后,單擊“Build”菜單中的“Build ”命令,建立可執行文件。

            操作能否正常進行?如果不行,則可能的原因是什么?

            不能正常運行,因為程序中出現許多語法和拼寫方面的錯誤 __

            ________________________________________________________________________

            步驟6:在工具欄單擊“Execute Program”(執行程序) 按鈕,或者按Ctrl + F5鍵,或者單擊“Build”菜單中的“Execute ”命令,執行程序。

            步驟7:按Ctrl + S鍵可暫停程序的執行,按Ctrl + Pau (Break) 鍵可終止程序的執行。

            清單3-5展示的是一個簡單的使用CreateProcess() API函數的例子。首先形成簡單的命令行,提供當前的EXE文件的指定文件名和代表生成克隆進程的號碼。大多數參數都可取缺省值,但是創建標志參數使用了:

            _______________ CREATE_NEW_CONSOLE______________________________

            標志,指示新進程分配它自己的控制臺,這使得運行示例程序時,在任務欄上產生許多活動標記。然后該克隆進程的創建方法關閉傳遞過來的句柄并返回main() 函數。在關閉程序之前,每一進程的執行主線程暫停一下,以便讓用戶看到其中的至少一個窗口。

            CreateProcess() 函數有________個核心參數?本實驗程序中設置的各個參數的值是:

            a. __ szFilename_________________________________________;

            b. ___ szCmdLine_______________________________________;

            c. ____ NULL_______________________________________;

            d. ____ NULL______________________________________;

            e. _____ FALSE_______________________________________;

            f. _____ CREATE_NEW_CONSOLE_______________________________;

            g. ____ NULL_______________________________________;

            h. ____ NULL_______________________________________;

            i. _____ &si________________________________________;

            j. _____ &pi_______________________________________。

            程序運行時屏幕顯示的信息是:

            提示:部分程序在Visual C++環境完成編譯、鏈接之后,還可以在Windows 2000的“命令提示符”狀態下嘗試執行該程序,看看與在可視化界面下運行的結果有沒有不同?為什么?

            2. 正在運行的進程

            本實驗的程序中列出了用于進程信息查詢的API函數GetProcessVersion() 與

            GetVersionEx() 的共同作用,可確定運行進程的操作系統的版本號。

            步驟8:在Visual C++ 窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序。

            清單3-6 使用進程和操作系統的版本信息

            // version項目

            # include

            # include

            // 利用進程和操作系統的版本信息的簡單示例

            void main()

            {

            // 提取這個進程的ID號

            DWORD dwIdThis = :: GetCurrentProcessId() ;

            // 獲得這一進程和報告所需的版本,也可以發送0以便指明這一進程

            DWORD dwVerReq = :: GetProcessVersion(dwIdThis) ;

            WORD wMajorReq = (WORD) dwVerReq > 16) ;

            WORD wMinorReq = (WORD) dwVerReq & 0xffff) ;

            std :: cout << “Process ID: “ << dwIdThis

            << “, requires OS: “ << wMajorReq << wMinorReq << std :: endl ;

            // 設置版本信息的數據結構,以便保存操作系統的版本信息

            OSVERSIONINFOEX osvix;

            :: ZeroMemory(&osvix, sizeof(osvix) ) ;

            rsionInfoSize = sizeof(osvix) ;

            // 提取版本信息和報告

            :: GetVersionEx(reinterpret_cast < LPOSVERSIONINFO > (&osvix) ) ;

            std :: cout << “Running on OS: “ << rVersion << “.”

            << rVersion << std :: endl;

            // 如果是NTS (Windows 2000) 系統,則提高其優先權

            if (formld = = VER_PLATFORM_WIN32_NT &&

            rVersion >= 5)

            {

            // 改變優先級

            :: SetPriorityClass(

            :: GetCurrentProcess() , // 利用這一進程

            HIGH_PRIORITY_CLASS) ; // 改變為high

            // 報告給用戶

            std :: cout << “Task Manager should now now indicate this”

            “process is high priority.” << std :: endl;

            }

            }

            步驟9:單擊“Build”菜單中的“Compile ”命令,再單擊“是”按鈕確認。系統對進行編譯。

            步驟10:編譯完成后,單擊“Build”菜單中的“Build ”命令,建立可執行文件。

            操作能否正常進行?如果不行,則可能的原因是什么?

            _______不能正常運行,因為程序中出現許多語法和拼寫方面的錯誤_________

            ________________________________________________________________________

            步驟11:在工具欄單擊“Execute Program” (執行程序) 按鈕,執行程序。

            運行結果:

            當前PID信息:______5310 OS:00________________________________________

            當前操作系統版本:___6.1__________________________________________

            系統提示信息:_____ Task Manager should now now indicate thisprocess is high priority._

            _______________________________________________________________________

            清單3-6中的程序向讀者表明了如何獲得當前的PID和所需的進程版本信息。為了運行這一程序,系統處理了所有的版本不兼容問題。

            接著,程序演示了如何使用GetVersionEx() API函數來提取OSVERSIONINFOEX結構。這一數據塊中包括了操作系統的版本信息。其中,“OS : 5.0”表示當前運行的操作系統是:

            ___________________ Windows 2000_________________________________

            清單3-6的最后一段程序利用了操作系統的版本信息,以確認運行的是Windows 2000。代碼接著將當前進程的優先級提高到比正常級別高。

            步驟12:單擊Ctrl + Alt + Del鍵,進入“Windows任務管理器”,在“應用程序”選項卡中右鍵單擊“3-6”任務,在快捷菜單中選擇“轉到進程”命令。

            在“Windows任務管理器”的“進程”選項卡中,與“3-6”任務對應的進程映像名稱是 (為什么?) :

            __________________________ ___________________________________

            右鍵單擊該進程名,在快捷菜單中選擇“設置優先級”命令,可以調整該進程的優先級,如設置為“高”后重新運行程序,屏幕顯示有變化嗎?為什么?

            ________________ PID信息變為4488 OS:00_____________________________

            ________________________________________________________________________

            ________________________________________________________________________

            除了改變進程的優先級以外,還可以對正在運行的進程執行幾項其他的操作,只要獲得其進程句柄即可。SetProcessAffinityMask() API函數允許開發人員將線程映射到處理器上;SetProcessPriorityBoost() API可關閉前臺應用程序優先級的提升;而 SetProcessWorkingSet()

            API可調節進程可用的非頁面RAM的容量;還有一個只對當前進程可用的API函數,即SetProcessShutdownParameters() ,可告訴系統如何終止該進程。

            3. 終止進程

            在清單3-7列出的程序中,先創建一個子進程,然后指令它發出“自殺彈”互斥體去終止自身的運行。

            步驟13:在Visual C++ 窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序。

            清單3-7 指令其子進程來“殺掉”自己的父進程

            // procterm項目

            # include

            # include

            # include

            static LPCTSTR g_szMutexName = “e” ;

            // 創建當前進程的克隆進程的簡單方法

            void StartClone()

            {

            // 提取當前可執行文件的文件名

            TCHAR szFilename [MAX_PATH] ;

            :: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

            // 格式化用于子進程的命令行,指明它是一個EXE文件和子進程

            TCHAR szCmdLine[MAX_PATH] ;

            :: sprintf(szCmdLine, “” %s “ child” , szFilename) ;

            // 子進程的啟動信息結構

            STARTUPINFO si;

            :: ZeroMemory(reinterpret_cast < void* > (&si) , sizeof(si) ) ;

            = sizeof(si) ; // 應當是此結構的大小

            // 返回的用于子進程的進程信息

            PROCESS_INFORMATION pi;

            // 用同樣的可執行文件名和命令行創建進程,并指明它是一個子進程

            BOOL bCreateOK = :: CreateProcess(

            szFilename, // 產生的應用程序名稱 (本EXE文件)

            szCmdLine, // 告訴我們這是一個子進程的標志

            NULL, // 用于進程的缺省的安全性

            NULL, // 用于線程的缺省安全性

            FALSE, // 不繼承句柄

            CREATE_NEW_CONSOLE, // 創建新窗口,使輸出更直觀

            NULL, // 新環境

            NULL, // 當前目錄

            &si, // 啟動信息結構

            &pi ) ; // 返回的進程信息

            // 釋放指向子進程的引用

            if (bCreateOK)

            {

            :: CloHandle(ss) ;

            :: CloHandle(d) ;

            }

            }

            void Parent()

            {

            // 創建“自殺”互斥程序體

            HANDLE hMutexSuicide = :: CreateMutex(

            NULL, // 缺省的安全性

            TRUE, // 最初擁有的

            g_szMutexName) ; // 為其命名

            if (hMutexSuicide != NULL)

            {

            // 創建子進程

            std :: cout << “Creating the child process.” << std :: endl;

            :: StartClone() ;

            // 暫停

            :: sleep(5000) ;

            // 指令子進程“殺”掉自身

            std :: cout << “Telling the child process to quit. ” << std :: endl;

            :: ReleaMutex(hMutexSuicide) ;

            // 消除句柄

            :: CloHandle(hMutexSuicide) ;

            }

            }

            void Child()

            {

            // 打開“自殺”互斥體

            HANDLE hMutexSuicide = :: OpenMutex(

            SYNCHRONIZE, // 打開用于同步

            FALSE, // 不需要向下傳遞

            g_szMutexName) ; // 名稱

            if (hMutexSuicide != NULL)

            {

            // 報告正在等待指令

            std :: cout << “Child waiting for suicide instructions. ” << std :: endl;

            :: WaitForSingleObject(hMutexSuicide, INFINITE) ;

            // 準備好終止,清除句柄

            std :: cout << “Child quiting. ” << std :: endl;

            :: CloHandle(hMutexSuicide) ;

            }

            }

            int main(int arqc, char* argv[] )

            {

            // 決定其行為是父進程還是子進程

            if (argc > l && :: strcmp(argv[l] , “child” ) = = 0)

            {

            Child() ;

            }

            el

            {

            Parent() ;

            }

            return 0;

            }

            清單3-7中的程序說明了一個進程從“生”到“死”的整個一生。第一次執行時,它創建一個子進程,其行為如同“父親”。在創建子進程之前,先創建一個互斥的內核對象,其行為對于子進程來說,如同一個“自殺彈”。當創建子進程時,就打開了互斥體并在其他線程中進行別的處理工作,同時等待著父進程使用ReleaMutex() API發出“死亡”信號。然后用Sleep() API調用來模擬父進程處理其他工作,等完成時,指令子進程終止。

            當調用ExitProcess() 時要小心,進程中的所有線程都被立刻通知停止。在設計應用程序時,必須讓主線程在正常的C++ 運行期關閉 (這是由編譯器提供的缺省行為) 之后來調用這一函數。當它轉向受信狀態時,通常可創建一個每個活動線程都可等待和停止的終止事件。

            在正常的終止操作中,進程的每個工作線程都要終止,由主線程調用ExitProcess()。接著,管理層對進程增加的所有對象釋放引用,并將用 GetExitCodeProcess() 建立的退出代碼從STILL_ACTIVE改變為在ExitProcess() 調用中返回的值。最后,主線程對象也如同進程對象一樣轉變為受信狀態。

            等到所有打開的句柄都關閉之后,管理層的對象管理器才銷毀進程對象本身。還沒有一種函數可取得終止后的進程對象為其參數,從而使其“復活”。當進程對象引用一個終止了的對象時,有好幾個API函數仍然是有用的。進程可使用退出代碼將終止方式通知給調用GetExitCodeProcess() 的其他進程。同時,GetProcessTimes() API函數可向主調者顯示進程的終止時間。

            步驟14:單擊“Build”菜單中的“Compile ”命令,再單擊“是”按鈕確認。系統對進行編譯。

            步驟15:編譯完成后,單擊“Build”菜單中的“Build ”命令,建立可執行文件。

            操作能否正常進行?如果不行,則可能的原因是什么?

            _______________能正常運行,因為程序中出現許多語法和拼寫方面的錯誤__

            ________________________________________________________________________

            步驟16:在工具欄單擊“Execute Program”按鈕,執行程序。

            運行結果:

            1) __________________________________________________________________

            表示:_創建子進程并讓子進程結束__________________________________

            2) __________________________________________________________________

            表示:__子進程等待結束, 在接到消息后結束.__________________________________

            步驟17:在熟悉清單3-7源代碼的基礎上,利用本實驗介紹的API函數來嘗試改進本程序 (例如使用GetProcessTimes() API函數) 并運行。請描述你所做的工作:

            ____________________________________________________________________

            ________________________________________________________________________

            ________________________________________________________________________

            ________________________________________________________________________

            實驗一操作系統Windows“任務管理器”的進程管理

            本文發布于:2024-03-02 09:32:30,感謝您對本站的認可!

            本文鏈接:http://www.newhan.cn/zhishi/a/1709343150275883.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:實驗一操作系統Windows“任務管理器”的進程管理.doc

            本文 PDF 下載地址:實驗一操作系統Windows“任務管理器”的進程管理.pdf

            標簽:進程   終止   運行   程序   函數   使用   創建   系統
            留言與評論(共有 0 條評論)
               
            驗證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 做暖暖视频在线看片免费| 青青草免费激情自拍视频| 中国少妇人妻xxxxx| 综合偷自拍亚洲乱中文字幕| 亚洲国产韩国欧美在线| 欧美另类亚洲一区二区| 中文国产日韩欧美二视频| 久久久久香蕉国产线看观看伊| 高中女无套中出17p| 国产亚洲精品视频中文字幕| 国产精品最新免费视频| 人妻系列中文字幕精品| 啪啪av一区二区三区| 久久久综合九色合综| 亚洲黄色成人网在线观看| 国产二区三区视频在线| 伊人网在线免费视频| 国产精品毛片一区二区| bt天堂新版中文在线| 又大又硬又爽免费视频| 草草ccyy免费看片线路| 日韩高清在线亚洲专区不卡| 亚洲欧洲自拍拍偷午夜色| 亚洲大尺度视频在线播放| 麻豆国产黄色一级免费片| 在线A毛片免费视频观看| 无码高潮少妇毛多水多水免费 | 亚洲人成电影在线天堂色| 日韩不卡在线观看视频不卡| 国产亚洲精品2021自在线| 国产精品区一区第一页| 99久久久无码国产精品免费| 亚洲日韩中文无码久久| 日韩精品亚洲专区在线播放| 日韩av爽爽爽久久久久久| 亚洲av无码专区在线观看成人| 日本韩无专砖码高清观看| 亚洲精品综合第一国产综合| 亚洲AV成人午夜福利在线观看| 日韩一区二区三区东京热| 爱啪啪精品一区二区三区|