linux進程管理
1. linux進程管理怎麼樣工作的
linux的進程管理,process進程間的常用信號1 SIGHUP 如果進程終止則掛斷該進程2 SIGINT 從鍵盤ctrl-c中斷進程9 SIGKILL 強制終止進程15 SIGTERM 正常終止進程17 SIGSTOP 從鍵盤ctrl-z暫停進程詳細見man 7 signal進程管理相關命令ps 顯示當前進程信息top 實時顯示當前進程信息並可以進程管理pstree 顯示進程樹結構kill 向進程發送信號,對進程重啟、終止等功能killall 通過進程名稱關閉進程nice 啟動新進程並設置它的優先順序root可任意調整nice值,范圍-20~19一般user僅可將nice值調高,范圍0~19renice 對正在運行的進程的nice值進行修改free 顯示內存使用情況uname 顯示系統信息uptime 顯示系統啟動時間和工作負載netstat 顯示網路信息dmesg 顯示核心檢測系統信息vmstat 檢測系統各項資源運行狀況fuser 查看正使用文件的進程lsof 查看某個進程正在使用那些文件pidof 找出正在運行的進程的PID相關文件/proc/* 整個系統的所有進程信息詳細見man 5 proc
2. Linux進程內存管理
對於包含MMU的處理器而言,Linux系統提供了復雜的存儲管理系統,使得進程所能訪問的內存達到4GB。在Linux系統中,進程的4GB內存空間被分為兩個部分——用戶空間與內核空間。用戶空間的地址一般分布為0~3GB(即PAGE_OFFSET,在Ox86中它等於OxC0000000),這樣,剩下的3~4GB為內核空間,用戶進程通常只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。用戶進程只有通過系統調用(代表用戶進程在內核態執行)等方式才可以訪問到內核空間。
每個進程的用戶空間都是完全獨立、互不相乾的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它並不會跟著進程改變,是固定的。內核空間的虛擬地址到物理地址映射是被所有進程共享的,內核的虛擬空間獨立於其他程序。
Linux中1GB的內核地址空間又被劃分為物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域。
對於x86系統而言,一般情況下,物理內存映射區最大長度為896MB,系統的物理內存被順序映射在內核空間的這個區域中。當系統物理內存大於896MB時,超過物理內存映射區的那部分內存稱為高端內存(而未超過物理內存映射區的內存通常被稱為常規內存),內核在存取高端內存時必須將它們映射到高端頁面映射區。Linux保留內核空間最頂部FIXADDR_TOP~4GB的區域作為保留區。
當系統物理內存超過4GB時,必須使用CPU的擴展分頁(PAE)模式所提供的64位頁目錄項才能存取到4GB以上的物理內存,這需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以後的CPU允許內存最大可配置到64GB,它們具備36位物理地址空間定址能力。
由此可見,對於32位的x86而言,在3~4GB之間的內核空間中,從低地址到高地址依次為:物理內存映射區→隔離帶→vmalloc虛擬內存分配器區→隔離帶→高端內存映射區→專用頁面映射區→保留區。
3. Linux有什麼進程管理命令
下面三條命令都可以用來查看進程:
ps -lA 是十分常用的,l參數用於顯示進程的詳細信息,A參數用於顯示所有的進程。可以配合grep命令來查找特定的進程
top 能夠顯示CPU和內存的佔用率,用於動態監視高資源佔用
pstree 用來查看進程的父子關系
4. linux下提供了哪些進程管理工具
ps top kill 想不出來了。
5. linux內核基礎進程管理
linux內核基礎進程管理
進程管理
進程:
處於執行期的程序(目標碼存放在內存中),進程是其所用的資源和打開的文件描述符,CPU的使用情況,掛起的信號,內核的內部數據等等一系列的信息與資源的總稱。
執行線程:
簡稱線程,是在進程中活動的對象,每一個線程都擁有一個獨立的程序計數器,進程棧,和一組進程寄存器。
在內核看來,線程只是一種特殊的進程,所以內核的調度對象是線程,而不是進程。
進程提供兩種虛擬機制:
虛擬處理器和虛擬內存,其實就是一種假象,給進程提供的一種假象,好像進程正在獨立的使用所有的內存資源與整個處理器,假象一直是計算機的一個重要問題,在《深入理解計算機系統》一書中有更詳細的描述。
進程描述符及任務結構:
內核把進程的列表放在一個叫做任務隊列的雙向鏈表中,其中的每一項是一個結構體,task_struct這是一個稱為進程描述符的結構這個結構包含一個進程所需的所有信息。在32位機器上就有1.7KB已經不小了。
分配進程描述符:
linux通過slab分配器分配進程描述符。現在一般建立一個struct thread_info 結構體來記錄進程描述符的,這個結構體是為了減少對寄存器的依賴,尤其是像X86 這種寄存器較少的結構,一般進程描述符是提前分配並且在一個進程死亡後它的描述符還可以再次使用所以linux的進程創建非常迅速。
進程描述符的存放:
內核通過唯一的進程標識值或者PID來標識每一個進程。PID其實是一個整形,可以通過改變系統代碼的宏值來改變進程ID的上限。
6. linux下怎麼用一個進程管理其他進程用c寫。
fork是開啟子進程,和管理其他進程搭不上邊,exec是也是開啟進程類的
所以你直接用c寫一個調用shell的方法,通過shell調用系統自帶的命令對進程進行管理
7. linux系統如何進行進程管理,內存管理,設備管理和文件管理
一樓仁兄那本書有點太深入,並且巨厚,若想簡單大概的了解一下內核,可以看robert love的《linux內核設計與實現》,薄的很,大致的都講了一下,適合入門
8. linux進程管理的實現
管理系統進程還是自己派生出來的進程, 是講述系統的進程管理原理嗎?
如果是實現自己的進程管理的話,可以採用派生子進程,然後通過消息隊列、管道、共享內存區管理子進程
系統的進程實現原理很復雜的
9. linux進程管理怎麼關閉後台進程
一、 &
加在一個命令的最後,可以把這個命令放到後台執行 ,如gftp &,
二、ctrl + z
可以將一個正在前台執行的命令放到後台,並且處於暫停狀態,不可執行
三、jobs
查看當前有多少在後台運行的命令
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識;也就是說,jobs命令顯示的是當前shell環境中所起的後台正在運行或者被掛起的任務信息;
四、fg
將後台中的命令調至前台繼續運行
如果後台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid)
五、bg
將一個在後台暫停的命令,變成繼續執行 (在後台執行)
如果後台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid)
將任務轉移到後台運行:
先ctrl + z;再bg,這樣進程就被移到後台運行,終端還能繼續接受命令。
概念:當前任務
如果後台的任務號有2個,[1],[2];如果當第一個後台任務順利執行完畢,第二個後台任務還在執行中時,當前任務便會自動變成後台任務號碼「[2]」 的後台任務。所以可以得出一點,即當前任務是會變動的。當用戶輸入「fg」、「bg」和「stop」等命令時,如果不加任何引號,則所變動的均是當前任務
進程的終止
後台進程的終止:
方法一:
通過jobs命令查看job號(假設為num),然後執行kill %num
方法二:
通過ps命令查看job的進程號(PID,假設為pid),然後執行kill pid
前台進程的終止:
ctrl+c
kill的其他作用
kill除了可以終止進程,還能給進程發送其它信號,使用kill -l 可以察看kill支持的信號。
SIGTERM是不帶參數時kill發送的信號,意思是要進程終止運行,但執行與否還得看進程是否支持。如果進程還沒有終止,可以使用kill -SIGKILL pid,這是由內核來終止進程,進程不能監聽這個信號。
進程的掛起
1)、後台進程的掛起:
在solaris中通過stop命令執行,通過jobs命令查看job號(假設為num),然後執行stop %num;
在redhat中,不存在stop命令,可通過執行命令kill -stop PID,將進程掛起;
當要重新執行當前被掛起的任務時,通過bg %num 即可將掛起的job的狀態由stopped改為running,仍在後台執行;當需要改為在前台執行時,執行命令fg %num即可;
2)、前台進程的掛起:
ctrl+Z;