Linux學習筆記9 程序 程序概述

2021-10-04 17:35:36 字數 1960 閱讀 1650

程序(process)是乙個程式一次執行的過程,而並非程式本身。程序是動態的,是乙個執行的程式,程式是靜態的。它是一些儲存在磁碟上的指令的有序集合。程序包含了程序的動態建立排程消亡的過程。

從系統的角度,通過控制塊(pcb,process control block)來描述程序pcb包含了程序的描述資訊(如:pid,process identification)、控制資訊(如占用了多少cpu)以及資源資訊(占用多少記憶體)等等。

核心使用程序來控制對cpu、記憶體、磁碟、網口等介面的訪問,並使用程序來決定在cpu上執行哪個程式。核心排程器負責在所有程序間分配cpu的執行時間,稱之為時間片(time slice),在程序用完時間片後,核心排程器會搶回程序對時間片控制權,將控制權交給下個程序的行為稱之為時間片輪轉

時間片輪轉原理如下:

程序的標識號(pid)和父程序(ppid)可通過介面getpid和getppid獲得

printf

("pid=%d,ppid=%d\n"

,getpid()

,getppid()

);

程序的使用者id和組id,也稱為程序的真實使用者id和真實組id可通過函式getuid()和getgid()獲得。

printf

("getuid=%d,getgid=%d,geteuid=%d,getegid=%d\n"

,\ getuid()

,getgid()

,geteuid()

,getegid()

);

核心對程序的訪問許可權進行檢查時,檢查的是程序的有效使用者id和有效組id,而並非真實使用者id和真實組id,可用geteuid()和getegid()獲得程序的有效使用者id和有效組id。

許可權提公升:即sudo命令的原理,假設mark1號能夠執行檔案 test ,而mark2號不具有test的可執行許可權,此時chmod u+s test,使得mark2能夠借助 root 的許可權對 test 進行執行。

原理:在檔案狀態(stat)中,存在著結構體

struct stat
其中 mode_t st_mode代表著檔案的許可權,st_mode是乙個short(短整型,16位)數,高四位為檔案型別低12位為檔案許可權,前3位為動態許可權,後9位為檔案自身許可權,前3位,第一位為u的許可權提公升,第二位為g的許可權提公升,第三位為粘滯位。

#include

"func.h"

intmain

(int argc,

char

*ar**)

printf

("%ld %x %ld %d %d %ld %ld %ld %s\n"

,buf.st_ino,buf.st_mode,buf.st_nlink

,buf.st_uid,buf.st_gid,buf.st_size,buf.st_blksize,buf.st_blocks,

ctime

(&buf.st_mtime));

return0;

}

檢視test的st_mode位89fd,即1000 1001 1111 1101

檔案許可權原理:

執行結果如下:

linux 程序學習筆記 程序訊號sigal

訊號 或軟中斷 是在軟體層次上對中斷的乙個模擬,其執行在 使用者空間 乙個程序對另外乙個或幾個程序通過傳送訊號來實現非同步通訊。當接收程序接收到訊號後,其可以註冊一下處理函式來說對這些訊號進行處理 也可以選擇忽略該訊號或者採用系統預設的處理方式 我看可以通過 kill l 命令來檢視系統支援的訊號,...

Linux程序執行緒學習筆記 程序建立

linux程序執行緒學習筆記 程序建立 周銀輝各位同學,轉換下思維,這裡說的是 程序 不是 執行緒 ok,我們開始 程序 二字似乎總有那麼些 只可意會不可言傳 的韻味,維基百科是這樣來解釋的 也有朋友如此來闡述,乙個可以執行的程式 和該程序相關聯的全部資料 包括變數,記憶體空間,緩衝區等等 程式的執...

Linux學習筆記(十四)程序

程序是如何工作的 當系統啟動的時候,核心先把一些自己的程式初始化為程序,然後執行乙個叫做init的程式。init再依次執行一系列的稱為init指令碼的shell指令碼 位於 etc 它們可以啟動所有的系統服務。其中許多系統服務以守護 daemon 程式的形式實現,守護程式僅在後台執行,沒有任何使用者...