歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux循序漸進 進程管理及作業控制

Linux循序漸進 進程管理及作業控制

日期:2017/2/28 17:49:22   编辑:Linux教程

Linux是一個多任務的操作系統,系統上同時運行著多個進程,正在執行的一個或多個相關進程稱為一個作業。使用作業控制,用戶可以同時運行多個作業,並在需要時在作業之間進行切換。本章詳細介紹進程管理及作業控制的命令,包括啟動進程、查看進程、調度作業的命令。

進程及作業的概念

Linux是一個多用戶多任務的操作系統。多用戶是指多個用戶可以在同一時間使用計算機系統;多任務是指Linux可以同時執行幾個任務,它可以在還未執行完一個任務時又執行另一項任務。

操作系統管理多個用戶的請求和多個任務。大多數系統都只有一個CPU和一個主存,但一個系統可能有多個二級存儲磁盤和多個輸入/輸出設備。操作系統管理這些資源並在多個用戶間共享資源,當您提出一個請求時,給您造成一種假象,好象系統只被您獨自占用。而實際上操作系統監控著一個等待執行的任務隊列,這些任務包括用戶作業、操作系統任務、郵件和打印作業等。操作系統根據每個任務的優先級為每個任務分配合適的時間片,每個時間片大約都有零點幾秒,雖然看起來很短,但實際上已經足夠計算機完成成千上萬的指令集。每個任務都會被系統運行一段時間,然後掛起,系統轉而處理其他任務;過一段時間以後再回來處理這個任務,直到某個任務完成,從任務隊列中去除。

Linux系統上所有運行的東西都可以稱之為一個進程。每個用戶任務、每個系統管理守護進程,都可以稱之為進程。Linux用分時管理方法使所有的任務共同分享系統資源。我們討論進程的時候,不會去關心這些進程究竟是如何分配的,或者是內核如何管理分配時間片的,我們所關心的是如何去控制這些進程,讓它們能夠很好地為用戶服務。

進程的一個比較正式的定義是:在自身的虛擬地址空間運行的一個單獨的程序。進程與程序是有區別的,進程不是程序,雖然它由程序產生。程序只是一個靜態的指令集合,不占系統的運行資源;而進程是一個隨時都可能發生變化的、動態的、使用系統運行資源的程序。而且一個程序可以啟動多個進程。

Linux操作系統包括三種不同類型的進程,每種進程都有自己的特點和屬性。

交互進程——由一個shell啟動的進程。交互進程既可以在前台運行,也可以在後台運行。

批處理進程——這種進程和終端沒有聯系,是一個進程序列。

監控進程(也稱守護進程)——Linux系統啟動時啟動的進程,並在後台運行。

上述三種進程各有各的作用,使用場合也有所不同。

進程和作業的概念也有區別。一個正在執行的進程稱為一個作業,而且作業可以包含一個或多個進程,尤其是當使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”這個作業就同時啟動了三個進程。

作業控制指的是控制正在運行的進程的行為。比如,用戶可以掛起一個進程,等一會兒再繼續執行該進程。shell將記錄所有啟動的進程情況,在每個進程過程中,用戶可以任意地掛起進程或重新啟動進程。作業控制是許多shell(包括bash和tcsh)的一個特性,使用戶能在多個獨立作業間進行切換。

一般而言,進程與作業控制相關聯時,才被稱為作業。

在大多數情況下,用戶在同一時間只運行一個作業,即它們最後向shell鍵入的命令。但是使用作業控制,用戶可以同時運行多個作業,並在需要時在這些作業間進行切換。這會有什麼用途呢?例如,當用戶編輯一個文本文件,並需要中止編輯做其他事情時,利用作業控制,用戶可以讓編輯器暫時掛起,返回shell提示符開始做其他的事情。其他事情做完以後,用戶可以重新啟動掛起的編輯器,返回到剛才中止的地方,就象用戶從來沒有離開編輯器一樣。這只是一個例子,作業控制還有許多其他實際的用途。

啟動進程

鍵入需要運行的程序的程序名,執行一個程序,其實也就是啟動了一個進程。在Linux系統中每個進程都具有一個進程號,用於系統識別和調度進程。啟動一個進程有兩個主要途徑:手工啟動和調度啟動,後者是事先進行設置,根據用戶要求自行啟動。

手工啟動

由用戶輸入命令,直接啟動一個進程便是手工啟動進程。但手工啟動進程又可以分為很多種,根據啟動的進程類型不同、性質不同,實際結果也不一樣,下面分別介紹。

1. 前台啟動

這或許是手工啟動一個進程的最常用的方式。一般地,用戶鍵入一個命令“ls –l”,這就已經啟動了一個進程,而且是一個前台的進程。這時候系統其實已經處於一個多進程狀態。或許有些用戶會疑惑:我只啟動了一個進程而已。但實際上有許多運行在後台的、系統啟動時就已經自動啟動的進程正在悄悄運行著。還有的用戶在鍵入“ls –l”命令以後趕緊使用“ps –x”查看,卻沒有看到ls進程,也覺得很奇怪。其實這是因為ls這個進程結束太快,使用ps查看時該進程已經執行結束了。如果啟動一個比較耗時的進程:

find / -name fox.jpg

然後再把該進程掛起,使用ps查看,就會看到一個find進程在裡面。

Copyright © Linux教程網 All Rights Reserved