使用者id和組id:
在設計應用時,總是試圖使用最小特權(least privilege)模型,依據此模型,程式應當只具有為完成給定任務所需的最小許可權,可用setuid函式設定實際使用者id和有效使用者id。用setgid函式設定實際組id和有效組id。下表總結了更改3個使用者id的不同方法
直譯器檔案:
起始行形式是:#! pathname
最常見的直譯器檔案以下列行開始:#! /bin/sh
對這種檔案的識別是由核心作為exec系統呼叫處理的一部分來完成的,核心實際使用的不是直譯器檔案,而是檔案中第一行pathname指向的檔案。
直譯器的作用:
1.有些程式是用某種語言寫的指令碼,直譯器檔案可將這一事實隱藏。
2.直譯器指令碼使我們可以使用除了/bin/sh以外其他shell來編寫shell指令碼。
函式system:
該函式在實現中,呼叫了fork,exec和waitpid。因此有三種返回值
1.fork失敗或waitpid返回除了eintr之外的出錯,則system返回-1
2.如果exec失敗(表示不能執行shell),則其返回值如同shell執行了exit(127)一樣。
3. 否則所有函式都成功(fork,exec和waitpid),system返回值是shell的終止狀態。
程序會計:
unix提供乙個選項進行程序會計處理,啟動後,每當程序結束後核心就會寫乙個會計記錄,典型的會計記錄包含命令名,所使用cpu時間總量,使用者id和組id,啟動時間等。
乙個至今沒有說明的函式acct啟動和禁用啟動會計,唯一使用這個函式的是accton命令,會計記錄寫到指定的檔案中去,會計記錄樣式基本如下:
會計記錄所需的各個資料由核心儲存在程序表中,並在乙個新程序被建立時初始化,程序終止時寫乙個會計記錄。這會帶來一些問題:
1.不能獲取永遠不終止的程序的會計記錄,像init程序,不會產生會計記錄
2.在會計檔案記錄的順序對應於程序終止的順序,而非它們啟動的順序。會計記錄對應於程序而不是程式,在fork之後,核心為子程序初始乙個記錄,而不是在乙個新程式被執行時初始化,雖然exec並不建立乙個新的會計記錄,但相應記錄中的命令名改變了,這意味著,如果乙個程序順序執行了3個程式,只會寫最後乙個程式,但cpu時間是三個程式之和。
程序排程:
unix對於程序提供的只是給予排程優先順序的粗粒度的控制,排程策略和排程優先順序是由核心確定的,程序可通過調整nice值選擇以更低優先順序執行(通過調整nice值降低它對cpu的占有),程序可以通過nice函式獲取或更改它的nice值
unix環境高階程式設計 程序環境與程序控制
a 終止 i.程序終止 1.正常終止 return exit exit 系a exit與 exit 的區別 exit退出時按 atexit 註冊的相反順序呼叫註冊過的函式,對開啟的流呼叫 fclose 將緩衝區的資料寫到檔案上 重新整理緩衝區 exit 沒有 b exit與自然返回 return 的...
《unix高階環境程式設計》程序控制 程序ID
在unix系統中,每個程序都有乙個非負整型表示的唯一程序id。當乙個程序終止時,程序id可以重新被其他程序使用,為了防止誤判,unix系統實現延遲重用演算法,即新建的程序id不同於最近終止程序所使用的id。程序id為0的是排程程序,也稱為交換程序,是核心的一部分,不執行磁碟上的程式,因此也稱為系統程...
《unix高階環境程式設計》程序控制 程序時間
程序時間有牆上時鐘時間 使用者cpu時間和系統cpu時間。任一程序都可以呼叫 times 函式以獲得它自己以及終止子程序的上述值。cpp view plain copy 程序時間 返回值 若成功則返回流逝的牆上時鐘時間 單位 時鐘滴答數 若出錯則返回 1 函式原型 include clock t t...