第8.1章 Linux编程-进程操作与同步函数_第1页
第8.1章 Linux编程-进程操作与同步函数_第2页
第8.1章 Linux编程-进程操作与同步函数_第3页
第8.1章 Linux编程-进程操作与同步函数_第4页
第8.1章 Linux编程-进程操作与同步函数_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux操作系统精讲大连理工大学软件学院

邱铁综合楼413,Tel_mail: qiutie@参考教材:《Linux应用与开发典型实例精讲》 清华大学出版社.2010.5第8章进程操作

学习本章要达到的目标:1.了解Linux进程工作的原理。2.掌握Linux进程操作函数的使用。3.熟悉Linux信号量的相关知识。4.掌握Linux信号量操作的函数,理解并掌握P、V操作。8.1Linux进程工作原理Linux是一个多任务的操作系统,在Linux中采用进程作为任务调度的单位

进程与程序的区别进程是一段运行的有生命力的程序,它是一个动态的概念;程序是存储在磁盘或其他存储介质中的静态代码,是一种静态的概念

Linux进程有五种状态,Linux通过维护者五个状态来调度进程的运行。这五个状态分别为:运行、可中断、不可中断、僵死、停止

Linux的进程在宏观上是并行的,Linux可以同时运行多个进程在微观上,各个进程是串行的,在同一时刻只能有一个进程处于“正在运行”的状态Linux通过进程号PID来标识不同的进程的,Linux中每一个进程都有一个唯一的进程号8.2进程操作函数创建子进程,生成的子进程是父进程的完全复制

#include<unistd.h>pid_tfork(void);pid_tvfork(void);执行命令

#include<unistd.h>intexecv(constchar*path,char*constargv[]);intexecl(constchar*path,constchar*arg,...);在新的环境变量下执行命令

#include<unistd.h>intexecve(constchar*filename,char*constargv[],char*constenvp[]);根据环境变量执行命令。#include<unistd.h>intexecvp(constchar*filename,char*constargv[]);intexeclp(constchar*filename,constchar*arg,...);取得当前进程的进程号

#include<unistd.h>pid_tgetpid(void);取得当前进程父进程的进程号

#include<unistd.h>pid_tgetppid(void);获取指定进程(getpgid)或当前进程(getpgrp)的组识别码

#include<unistd.h>pid_tgetpgid(pid_tpid);pid_tgetpgrp(void);

取得指定进程、进程组或用户的优先级

#include<sys/time.h>#include<sys/resource.h>intgetpriority(intwhich,intwho);设置指定进程的组识别码#include<unistd.h>intsetpgid(pid_tpid,pid_tpgid);设置指定进程、进程组、用户的优先级

#include<sys/time.h>#include<sys/resource.h>pid_tsetpriority(intwhich,intwho,intprio);暂停当前进程的执行,等待子进程的中端或结束

#include<sys/types.h>#include<sys/wait.h>pid_twait(int*status);暂停当前进程的执行,等待子进程的中端或结束

#include<sys/types.h>#include<sys/wait.h>pid_twaitpid(pid_tpid,int*status,intoptions);结束当前进程

#include<unistd.h>void_exit(intstatus);设定当进程结束时需要运行的函数

#include<unistd.h>intatexit(void(*function)(void));设定当进程正常结束时需要运行的函数#include<unistd.h>inton_exit(void(*function)(int,void*),void*arg);8.3信号量操作系统需要解决进程之间资源合理分配的问题Linux采用信号量(Semaphore)来解决这一问题,一个信号量表示可用资源的数量对信号量有两种操作

P(S):信号量的值S=S-1,如果S

0,则正常运行,如果S<0,则进程暂停运行进入等待队列。

V(S):信号量的值S=S+1,如果S>0,则正常运行,如果S

0,则从等待队列中选择一个进程使其继续运行,进程V操作的进程仍继续运行。8.4信号量操作的函数创建并打开一个信号量集,或打开一个以创建的信号量集

#include<sys/sem.h>intsemget(key_tkey,intnsems,intsemflg);

对指定的信号量进行指定的操作

#include<sys/sem.h>intsemop(intsemid,structsembuf*sops,unsignednsops);

structsembuf{ ushortsem_num; shortsem_op; shortsem_flg;};对指定的信号量进行控制操作

#include<sys/sem.h>intsemctl(intsemid,intsemnum,intcmd,...);

cmd的常用可取值(非完全)如下:IPC_STAT 读取信号量的状态信息,返回到arg的buf元素中。IPC_RMID 删除指定的信号量(集)。GETPID 返回最后一个执行semop函数的进程的进程号。GETVAL 返回信号量的值。SETVAL 设置信号量的值,取自arg的val元素。8.5应用实例训练五位哲学家围坐在一张圆形桌子上,桌子上有一盘饺子。每一位哲学家要么思考,要么等待

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论