中断:正在执行A的操作,然后被B打断;去执行B,等B执行完后,再去执行A
函数
signal
sighandler_t signal(int signum, sighandler_t handler);
功能:注册信号处理函数
参数:
signum:信号编号
sighandler_t handler:信号处理函数
返回值:成功:上一次处理的函数指针的地址
失败:NULL
用途:进行僵尸态的回收
kill:
int kill(pid_t pid, int sig);
就相当于kill
int raise------飞升,给调用者发信号;也可以把自己飞升
int raise(int sig)
unsigned int alarm(unsigned int secnd)
就是定时
IPC进程通信
a.共享内存
b.消息队列
c.信号灯
共享内存(没有了用户和内核空间的数据搬移,效率最高)
就是说一个进程中它的用户空间其实是虚拟的;虽然进程间的空间地址一样;如果想要实现进程间的通信,就要在内核空间里开辟一个共享对象空间;这个空间会对应他们的用户空间地址;在进行通信时,只需要在共享空间里找就行了;
1.得到同一个key值
key_t ftok(const char*pathname,int proj_id)
参数:pathname:就是路径地址,一般写成"/";
proj_id:就是一个八位的值,写成字母比如'A';
2.找到共享内存
int shmget(ke_t key,size_t size,int shmflg)
参数:key,就是ftok这个函数的返回值,就是那个key值
size:空间大小,一般都是1024的倍数
shmflg:标志位,常用的IPC_CREAT
3.映射:
void *shmat(int shmid,const void *shmaddr,int shmflag)
参数:shmid:就是shmget返回的值
shmaddr:就是你要指定到哪个虚拟空间;填NULL,让系统自动挂载空间
shmflag:0就是可读可写
SHM_RDONLY是只读
4.通信
5.卸载共享对象
shmctl(int shmid,const void *shmaddr,struct shmid_ds *buf)
参数:shmid :shmget 返回的id
shmaddr:IPC_RMID------标记删除共享内存
buf:如果是IPC_RMID的时候就直接填NULL