进程理论与编程
来源:互联网 发布:linux物理网卡 编辑:程序博客网 时间:2024/04/29 08:59
进程和程序区别:进程可以看成运行起来的程序,具有动态,并发,独立,异步性。
具有三态:就绪,执行,诸塞
进程互斥:若干进程使用共享资源时,最多只允许一个进程使用。
进程同步:并发进程按一定顺序执行的过程称为进程间的同步。
进程调度:按一定算法,从一组待运行的进程中选出一个来占有CPU运行。调度方式:抢占和非抢占
调度算法:先来先服务;短进程先调度;优先级调度;时间片轮寻。
临界资源:同一时刻允许一个进程访问的资源。进行中访问临界资源的那段代码叫做临界区。
获取ID
Pid_t Getpid(void);
创建进程 fork/vfork
Pid_t fork(void);
Pid_t vfork(void);
区别:
Fork子进程拷贝父进程的数据段
Vfork 共享数据段
Fork 运行顺序不确定
Vfork 子进程先运行
Exec用被执行的程序替换调用它的程序 ,PID不会改变。
Int execl(const char *path,const char *arg1,......);
Path:被执行的程序名
Arg: 参数
例如
Execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
进程等待
Pid_t wait(int *status)
例如Wait(NULL);
阻塞改进程,直到其某个子进程退出。
进程通信原因:
数据传输,资源共享,通知事件,进程控制。
进程通信(IPC)由下几部分继承来:
Unix进程通信,POSIX 可移植操作系统接口,system V进程通信。
linux通信方式:
管道pipe和有名管道fifo,信号(signal),消息队列,共享内存,信号量,套接字。
信号通信
信号发送 按键,函数或命令
Int kill(pid_t pid,int signo);//可给其他进程发信号
Int raise(int signo);//给自己发信号
Int alarm(int seconds);//设置时间到了产生sigalarm信号
Int pause(void)//挂起 直到捕捉到一个信号
信号处理
两种方法:一种是signal函数,另一种是信号集函数组。
Void(*signal(int signo ,void (*fun)(int)))(int) typedef void (*sighandler_t)(int) sighandler_t signal(int signum ,sighandler_t handler))
例如
Void my_func()
{
Printf(“hahahaha \n”);
}
Main()
{
Signal(SIGINT,my_func);
Pause();
Exit(0);
}
Handler可能的值:sig_ign忽略,sig_dfl,信号处理函数名。
共享内存
是多个进程共享一部分物理内存。
实现分两个步骤:
使用shmget函数0创建共享内存;
Shmat函数映射共享内存。
Int shmget(key_t key,int size, int shmflg);
Key:标识共享内存的键值:0或IPC_PRIVATE。key为IPC_PRIVATE时创建一块新的共享内存;key为0,shmflg为IPC_PRIVATE时也创建一块新的共享内存。
Int shmat(int shmid,char *shmaddr,int flag)
Shmid :shmget函数返回的共享内存存储标示符
Shmaddr:为0 表示自动分配地址
Flag:什么方式确定映射的地址
消息队列
Struct msg_buf
{
Int mtype;
Char data[255];
}
Key=Ftok(‘/tem/2’ ,’a’ );//吧消息队列文件名转换为键值
Msgid=Msgget(key,IPC_CREAT|0666);//利用键值打开消息队列
Struct msg_buf msgbuf;
Msgbuf.mtype=getpid();
Ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAT);发送
ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),IPC_NOWAIT );接收
信号量
用途是来保护临界资源。进程可根据它判断是否能够访问某些共享资源。
分类:
二值信号量,只能去0/1
计数信号量,可以取任意值
Int semget(key_t key,int nsems,int semflg);创建信号量集合
Key键值
Nsems多少个信号量
Semflg标识 IPC_NOWAIT 和IPC_END
Int semop(int semid, struct sembuf *sops, unsigned nsops); 对信号量的控制
Semid 信号量集的ID
Sops 操作数组,表明进行什么操作
Nsops 指向数组的元素个数
- 进程理论与编程
- 多线程理论与编程
- PHP多进程编程理论+实战
- 安卓理论之进程与线程
- 多核编程理论与实践参考博客
- 浅析C++多线程编程理论与实践
- 浅析C++多线程编程理论与实践
- 进程控制与进程通信编程
- Linux多进程编程 与windows进程
- 系统编程之进程与进程
- 进程管理-理论篇
- 进程、线程、多线程理论
- 进程控制理论
- 06-进程控制理论
- LInux进程控制与编程
- LInux进程控制与编程
- Linux进程与线程编程
- 【Linux】进程概念与编程
- android图像处理(3)浮雕效果
- [JACA][WAS]WAS6报警告解决方法之:WARNING: Cannot set status. Response already committed.
- 字符设备驱动程序(第三章 )
- 前两天云服务器又被攻击了情况汇报很严重
- 连载之四:深度揭秘微信的敏捷开发与流程管理
- 进程理论与编程
- CMUSphinx Learn - Building Language Model
- JQuery easyUI扩展验证机制的正则表达式
- android图片特效处理之锐化效果
- Juno版本的Eclipse才支持将Maven的webapp项目转换成3.0版本的动态网页模板吗?
- 微信连载之五:品牌和推广也要推翻重来!
- innodb存储引擎之B+算法源码分析(未完待续)
- python re模块
- 直方图;绑定变量窥探;自适应游标