歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux中用C語言來創建進程

Linux中用C語言來創建進程

日期:2017/2/27 9:23:55   编辑:更多Linux
  進程的概念   Linux操作系統是面向多用戶的.在同一時間可以有許多用戶向操作系統發出各種命令.那麼操作系統是怎麼實現多用戶的環境呢?在現代的操作系統裡面,都有程序和進程的概念.那麼什麼是程序,什麼是進程呢?通俗的講程序是一個包含可以執行代碼的文件,是一個靜態的文件.而進程是一個開始執行但是還沒有結束的程序的實例.就是可執行文件的具體實現.   一個程序可能有許多進程,而每一個進程又可以有許多子進程.依次循環下去,而產生子孫進程.當程序被系統調用到內存以後,系統會給程序分配一定的資源(內存,設備等等)然後進行一系列的復雜操作,使程序變成進程以供系統調用.在系統裡面只有進程沒有程序,為了區分各個不同的進程,系統給每一個進程分配了一個ID(就象我們的身份證)以便識別.   為了充分的利用資源,系統還對進程區分了不同的狀態.將進程分為新建,運行,阻塞,就緒和完成五個狀態.新建表示進程正在被創建,運行是進程正在運行,阻塞是進程正在等待某一個事件發生,就緒是表示系統正在等待CPU來執行命令,而完成表示進程已經結束了系統正在回收資源.關於進程五個狀態的詳細解說我們可以看《操作系統》上面有詳細的解說。   2.進程的標志   上面我們知道了進程都有一個ID,那麼我們怎麼得到進程的ID呢?系統調用getpid可以得到進程的ID,而getppid可以得到父進程(創建調用該函數進程的進程)的ID. QUOTE: pid_t getpid(void); pid_t getppid(void);  進程是為程序服務的,而程序是為了用戶服務的.系統為了找到進程的用戶名,還為進程和用戶建立聯系.這個用戶稱為進程的所有者.相應的每一個用戶也有一個用戶ID.通過系統調用getuid可以得到進程的所有者的ID.由於進程要用到一些資源,而Linux對系統資源是進行保護的,為了獲取一定資源進程還有一個有效用戶ID.這個ID和系統的資源使用有關,涉及到進程的權限.通過系統調用geteuid我們可以得到進程的有效用戶ID.和用戶ID相對應進程還有一個組ID和有效組ID系統調用getgid和getegid可以分別得到組ID和有效組ID. QUOTE: uid_t getuid(void); uid_t geteuid(void); gid_t getgid(void); git_t getegid(void);  有時候我們還會對用戶的其他信息感興趣(登錄名等等),這個時候我們可以調用getpwuid來得到。 QUOTE: 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 */ };




Copyright © Linux教程網 All Rights Reserved