Linux下C語言編程--進程的創(chuàng)建
更新時間: 2007-05-28 13:46:28來源: 粵嵌教育瀏覽量:658
1.進程的概念
Linux操作系統(tǒng)是面向多用戶的.在同一時間可以有許多用戶向操作系統(tǒng)發(fā)出各種命令.那么操作系統(tǒng)是怎么實現(xiàn)多用戶的環(huán)境呢?在現(xiàn)代的操作系統(tǒng)里面,都有程序和進程的概念.那么什么是程序,什么是進程呢?通俗的講程序是一個包含可以執(zhí)行代碼的文件,是一個靜態(tài)的文件.而進程是一個開始執(zhí)行但是還沒有結束的程序的實例.就是可執(zhí)行文件的具體實現(xiàn).
一個程序可能有許多進程,而每一個進程又可以有許多子進程.依次循環(huán)下去,而產(chǎn)生子孫進程.當程序被系統(tǒng)調用到內存以后,系統(tǒng)會給程序分配一定的資源(內存,設備等等)然后進行一系列的復雜操作,使程序變成進程以供系統(tǒng)調用.在系統(tǒng)里面只有進程沒有程序,為了區(qū)分各個不同的進程,系統(tǒng)給每一個進程分配了一個ID(就象我們的身份證)以便識別.
為了充分的利用資源,系統(tǒng)還對進程區(qū)分了不同的狀態(tài).將進程分為新建,運行,阻塞,就緒和完成五個狀態(tài).新建表示進程正在被創(chuàng)建,運行是進程正在運行,阻塞是進程正在等待某一個事件發(fā)生,就緒是表示系統(tǒng)正在等待CPU來執(zhí)行命令,而完成表示進程已經(jīng)結束了系統(tǒng)正在回收資源.關于進程五個狀態(tài)的詳細解說我們可以看《操作系統(tǒng)》上面有詳細的解說。
2.進程的標志
上面我們知道了進程都有一個ID,那么我們怎么得到進程的ID呢?系統(tǒng)調用getpid可以得到進程的ID,而getppid可以得到父進程(創(chuàng)建調用該函數(shù)進程的進程)的ID.
pid_t getpid(void);
pid_t getppid(void);
進程是為程序服務的,而程序是為了用戶服務的.系統(tǒng)為了找到進程的用戶名,還為進程和用戶建立聯(lián)系.這個用戶稱為進程的所有者.相應的每一個用戶也有一個用戶ID.通過系統(tǒng)調用getuid可以得到進程的所有者的ID.由于進程要用到一些資源,而Linux對系統(tǒng)資源是進行保護的,為了獲取一定資源進程還有一個有效用戶ID.這個ID和系統(tǒng)的資源使用有關,涉及到進程的權限.通過系統(tǒng)調用geteuid我們可以得到進程的有效用戶ID.和用戶ID相對應進程還有一個組ID和有效組ID系統(tǒng)調用getgid和getegid可以分別得到組ID和有效組ID.
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);
有時候我們還會對用戶的其他信息感興趣(登錄名等等),這個時候我們可以調用getpwuid來得到.
struct passwd {
char *pw_name; /* 登錄名稱 */
char *pw_passwd; /* 登錄口令 */
uid_t pw_uid; /* 用戶ID */
gid_t pw_gid; /* 用戶組ID */
char *pw_gecos; /* 用戶的真名 */
char *pw_dir; /* 用戶的目錄 */
char *pw_shell; /* 用戶的SHELL */
};
#include
#include
struct passwd *getpwuid(uid_t uid);
推薦閱讀
- ·Linux字符設備驅動框架解析:file_operations的核心作用與實現(xiàn)
- ·廣東朝歌數(shù)碼科技股份有限公司專場招聘會
- ·深化產(chǎn)教融合,共筑技能人才培養(yǎng)新生態(tài) —— 廣州華立學院到訪粵嵌從化校區(qū)為深化產(chǎn)教
- ·校企合作新突破 | 粵嵌科技與三亞學院共探產(chǎn)教融合新路徑
- ·粵嵌科技入選國家級職業(yè)數(shù)字展館聯(lián)合建設單位,賦能計算機程序設計員高技能人才培養(yǎng)
- ·嵌入式實時操作系統(tǒng)的性能優(yōu)化與實現(xiàn)路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學探索 AGI 時代教學新范式
- ·嵌入式系統(tǒng)中的低功耗設計策略與實現(xiàn)路徑
- ·深圳市軒宇軟件開發(fā)有限公司專場招聘會
- ·嵌入式系統(tǒng)中的代碼空間優(yōu)化:策略與實踐