电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Linux程序設計入門 系統進程的詳細介紹

瀏覽:168日期:2023-07-15 10:28:06

1、進程的概念

Linux操作系統是面向多用戶的.在同一時間可以有許多用戶向操作系統發出各種命令.那么操作系統是怎么實現多用戶的環境呢? 在現代的操作系統里面,都有程序和進程的概念.那么什么是程序,什么是進程呢? 通俗的講程序是一個包含可以執行代碼的文件,是一個靜態的文件.而進程是一個開始執行但是還沒有結束的程序的實例.就是可執行文件的具體實現. 一個程序可能有許多進程,而每一個進程又可以有許多子進程.依次循環下去,而產生子孫進程. 當程序被系統調用到內存以后,系統會給程序分配一定的資源(內存,設備等等)然后進行一系列的復雜操作,使程序變成進程以供系統調用.在系統里面只

有進程沒有程序,為了區分各個不同的進程,系統給每一個進程分配了一個ID(就象我們的身份證)以便識別. 為了充分的利用資源,系統還對進程區分了不同的狀態.將進程分為新建,運行,阻塞,就緒和完成五個狀態. 新建表示進程正在被創建,運行是進程正在運行,阻塞是進程正在等待某一個事件發生,就緒是表示系統正在等待CPU來執行命令,而完成表示進程已經結束了系統正在回收資源. 關于進程五個狀態的詳細解說我們可以看《操作系統》上面有詳細的解說。

2、進程的標志

上面我們知道了進程都有一個ID,那么我們怎么得到進程的ID呢?系統調用getpid可以得到進程的ID,而getppid可以得到父進程(創建調用該函數進程的進程)的ID.

#include <unistd> pid_t getpid(void); pid_t getppid(void);

進程是為程序服務的,而程序是為了用戶服務的.系統為了找到進程的用戶名,還為進程和用戶建立聯系.這個用戶稱為進程的所有者.相應的每一個用戶也有一個用戶ID.通過系統調用getuid可以得到進程的所有者的ID.由于進程要用到一些資源,而Linux對系統資源是進行保護的,為了獲取一定資源進程還有一個有效用戶ID.這個ID和系統的資源使用有關,涉及到進程的權限. 通過系統調用geteuid我們可以得到進程的有效用戶ID. 和用戶ID相對應進程還有一個組ID和有效組ID系統調用getgid和getegid可以分別得到組ID和有效組ID。

#include <unistd> #include <sys/types.h> uid_t getuid(void); uid_t geteuid(void); gid_t getgid(void); git_t getegid(void);

有時候我們還會對用戶的其他信息感興趣(登錄名等等),這個時候我們可以調用getpwui

d來得到。

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 <pwd.h> #include <sys/types.h> struct passwd *getpwuid(uid_t uid);

下面我們學習一個實例來實踐一下上面我們所學習的幾個函數:

#include <unistd.h> #include <pwd.h> #include <sys/types.h> #include <stdio.h> int main(int argc,char **argv) { pid_t my_pid,parent_pid; uid_t my_uid,my_euid; gid_t my_gid,my_egid; struct passwd *my_info; my_pid=getpid(); parent_pid=getppid(); my_uid=getuid(); my_euid=geteuid(); my_gid=getgid(); my_egid=getegid(); my_info=getpwuid(my_uid); printf('Process ID:%ld ',my_pid); printf('Parent ID:%ld ',parent_pid); printf('User ID:%ld ',my_uid); printf('Effective User ID:%ld ',my_euid); printf('Group ID:%ld ',my_gid); printf('Effective Group ID:%ld ',my_egid): if(my_info) { printf('My Login Name:%s ' ,my_info->pw_name); printf('My Password :%s ' ,my_info->pw_passwd); printf('My User ID :%ld ',my_info->pw_uid); printf('My Group ID :%ld ',my_info->pw_gid); printf('My Real Name:%s ' ,my_info->pw_gecos); printf('My Home Dir :%s ', my_info->pw_dir); printf('My Work Shell:%s ', my_info->pw_shell); } }

3、進程的創建

創建一個進程的系統調用很簡單.我們只要調用fork函數就可以了.

#include <unistd.h> pid_t fork();

當一個進程調用了fork以后,系統會創建一個子進程.這個子進程和父進程不同的地方只有他的進程ID和父進程ID,其他的都是一樣.就象符進程克隆(clone)自己一樣.當然創建兩個一模一樣的進程是沒有意義的.為了區分父進程和子進程,我們必須跟蹤fork的返回值. 當fork掉用失敗的時候(內存不足或者是用戶的最大進程數已到)fork返回-1,否則fork的返回值有重要的作用.對于父進程fork返回子進程的ID,而對于fork子進程返回0.我們就是根據這個返回值來區分父子進程的. 父進程為什么要創建子進程呢?前面我們已經說過了Linux是一個多用戶操作系統,在同一時間會有許多的用戶在爭奪系統的資源.有時進程為了早一點完成任務就創建子進程來爭奪資源. 一旦子進程被創建,父子進程一起從fork處繼續執行,相互競爭系統的資源.有時候我們希望子進程繼續執行,而父進程阻塞直到子進程完成任務.這個時候我們可以調用wait或者waitpid系統調用.

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *stat_loc); pid_t waitpid(pid_t pid,int *stat_loc,int options);

標簽: Linux系統
主站蜘蛛池模板: 巩义市科瑞仪器有限公司| 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 车载加油机品牌_ 柴油加油机厂家 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 噪声治理公司-噪音治理专业隔音降噪公司 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商| 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 成都思迪机电技术研究所-四川成都思迪编码器 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易| 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 |