国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux進程淺析(上)

2019-11-06 06:22:47
字體:
來源:轉載
供稿:網友

linux進程淺析(上)

程序和進程內核中的進程結構C語言啟動過程進程終止方式Linux下進程的查看進程的幾種狀態以及相互轉換

程序和進程

程序:程序就是存放在磁盤中的可執行文件進程:程序的執行實例稱為進程進程具有獨立權限和指責,如果系統中某個進程崩潰,它不會影響到其余的進程每個進程運行在各自的虛擬地址中,進程之間可以通過由內核控制的機制和相互通訊進程ID:每個LInux進程都一定有一個唯一的數字標識符,稱為進程ID,進程ID總是一非負整數 PID;getpid();ps -ef | more //列出所有的進程ps -aux | more也是查看所有的進程,二者之間存在細微差別

內核中的進程結構

進程其實在內核中主要是由一個task_struct來進行控制的,而這個結構體是在源碼的sched.h頭文件中去做定義的 一般這個進程的頭文件存放在/usr/src/linux-headers-4.4.0-65-generic/include/linux$ 下, 有興趣的可以看一下這個sched.h這個文件。 文件很大

C程序的啟動過程

內核會啟動一個特殊例程啟動例程:在進程main函數執行之前內核會啟動該例程放置在/lib/libc.so。。。中編譯器在編譯時會將啟動例程編譯進可執行文件中啟動例程作用:搜集命令行參數給main函數中的argc和argv搜集環境變了 信息構建環境 標并且傳遞 給main函數登記進程終止函數

進程終止方式:

正常終止:1:從主函數中返回2:調用exit(標準c庫函數)3:調用_exit或_Exit(系統調用)4:最后一個線程從其啟動例程返回5:最后一個線程調用pthread_exit異常終止://非法操作1:調用abort2:接受到一個信號并終止3:最后一個線程對取消請求做處理響應進程返回同常程序運行成功返回0,否則返回非0在shell中可以查看進程返回值(echo $?)
方式區別 return exit _exit/_EXIT
是否刷新標準IO緩存
是否調用終止函數

其實可以這樣進行理解一下,就是在標準庫函數中的退出其實就是在系統調用的基礎之上,加上了一層緩存機制,而事實上也確實是這樣。所有的標準庫函調用其實都是在系統調用的基礎上再次封裝形成的

下面通過一個代碼的形式演示一下:

#include<unistd.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>#include<string.h>void term_fun1(void){ 這里的testCode是可以直接進行run的,有興趣的可以拿過去簡單跑一下,就會發現其中哪一個函數可以刷緩存,哪一個不能刷緩存,在這里就不多做解釋了

Linux下進程的查看

前面提到過進程的查看其實是由ps命令來查看的,但是單純的ps查看的僅僅只是當前的進程。卻看不到系統中運行的其他進程;ps 查看當前 進程。信息比較少ps -ef | more //查看進程詳細信息ps -aux | more //查看進程詳細信息并且包含系統資源的命令

關于這些命令還是簡單演示一下吧: 使用ps命令 這里寫圖片描述

使用ps -ef | more命令

這里寫圖片描述

使用ps -aux| more命令

這里寫圖片描述 從上面幾張圖中其實可以看到很大的差別,就是ps -aux | more顯示出來的信息相對更加全面一點

關于其中的顯示的信息 USER 用戶屬主 UID 用戶ID PID 進程ID STIME 啟動時間 PPID 進程父進程ID CPU CPU占用的資源 MEM 內存占用 NI 進程的NICE數值,越大,表示較少占用cpu的時間 VSZ 進程虛擬大小
rss 駐留中頁的多少 TTY 終端類型 STAT 當前的狀態R(runing運行狀態),S(等待狀態),T(終止狀態),Z(僵尸狀態) START 啟動進程的時間 TIME 運行進程所花費的時間 COMMAND 執行命令

進程的幾種狀態以及相互轉換

進程的幾種狀態主要包括了:

進程創建進程就緒進程運行進程阻塞(等待)

進程結束

簡單通過一張圖來展示一下其相互關系:

這里寫圖片描述

從上面的圖示中我們可以看到整個狀態之間的轉換圖,分成了創建,就緒,運行,阻塞,以及退出這幾種狀態,而如果真正的細分進程的狀態的話,其可以劃分成更多的類型狀態。在這里就不去細說了。有興趣的童鞋可以查查。

謝謝大家的觀看。這已經是第二遍了。手賤,之前寫的被刪掉了,結果找不回來了。這些都是關于進程的一些簡單了解和介紹。在后面會更深入的了解怎么創建進程,進程調度策略等。

謝謝觀看。

歡迎持續訪問博客


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永清县| 福安市| 银川市| 大田县| 常山县| 英超| 治县。| 成都市| 榆树市| 汤阴县| 思南县| 苗栗市| 鄱阳县| 南召县| 五原县| 昆山市| 蚌埠市| 浮山县| 拉孜县| 文登市| 仪陇县| 六安市| 香格里拉县| 繁昌县| 应城市| 泸州市| 富源县| 麻阳| 昌黎县| 沭阳县| 津市市| 武胜县| 全南县| 文成县| 天门市| 三河市| 如东县| 峨眉山市| 天祝| 温州市| 和林格尔县|