信号量V笔记

kill(传送信号给指定的进程)
int kill(pid_t pid,int sig);
int raise(int sig);
kill(getpid(), signo);等价于 raise(signo);

pid>0 将信号传给进程识别码为pid 的进程。
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程

两函数返回值都是	成功则返回0
				失败则返回-1。
signal
void (*signal(int sig, void (*func)(int)))(int);
sig		--->你要接收到的信号
func	--->指向接收到信号之后执行的函数
返回值:成功--->0,失败-->0

alarm
unsigned alarm(unsigned seconds);
seconds		--->延时秒数
返回值:成功--->0,失败-->0

pause(让进程进入睡眠状态)
int pause(void);
返回值
	收到非致命信号或者已经被捕捉的信号  	--->-1
	收到致命信号导致进程异常退出			--->不返回


int semget(key_t key, int nsems, int semflg);
参数
key			所创建或打开信号量集的键值该值通常为0,
				创建一个仅能被进程进程给我的信号量,
				可以一个ftok()函数来取得一个唯一的键值
nsems		创建的信号量集中的信号量的个数,该参数只在创建信号量集时有效
semflg		调用函数的操作类型,也可用于设置信号量集的访问权限

				IPC_CREAT	如果信号量不存在,则创建一个信号量,否则获取。
				IPC_EXCL		只有信号量不存在的时候,新的信号量才建立,否则就产生错误
返回值		成功	--->则返回信号量集的IPC标识符,其作用与信息队列识符一样,也就是信号量ID
				失败	--->-1
功能			创建一个新的信号量集,或者存取一个已经存在的信号量集

int semop(int semid, struct sembuf *sops, unsigned nsops);
参数 
	semid		信号量ID
	sops			信号量操作结构体数组,每个结构体对应一个特定信号的操作
	nsops		结构体数组元素个数
返回值	成功	--->0
			失败	--->-1
功能
	对信号量进行P/V操作,或者等0操作

注意
struct sembuf{
	unsigned short sem_num;  /* 信号量元素需要(相当于数组下标,从0开始) */
	short          sem_op;   /* 操作参数 */
	short          sem_flg;  /* 操作选项 */
};
sem_num		--->存放集合中某一个信号量的索引,如果集合只包含一个元素,则sem_num只能是0
sem_op		--->有三种情况
				负数	--->信号量的值减去sem_op的绝对值		--->P操作
				整数	--->信号量的值加上sem_op的值			--->V操作 
				等0		--->将会调用进程将调用sleep()进入睡眠,直到信号量的值为0,这在一个进程等待完全空闲的资源时使用
sem_flg; 	--->通常为SEM_UNDO,使操作系统跟踪信号,并在进程没有释放该信号量而终止时,操作系统释放信号量

int semctl(int semid, int semnum, int cmd, ...);
int semctl(int semid, int semnum, int cmd, union semun ctl_arg);
		
参数 
	semid	--->信号量ID
	semnum	--->信号量元素序号(数组下标)
	cmd		--->你要操作的相关命令
					IPC_STAT 	--->把状态信息放入ctl_arg.stat中
					IPC_SET 	--->用ctl_arg.stat中的值设置所有权/许可权
					IPC_RMID 	--->从系统中删除信号量集合
					GETVAL 		--->返回信号量的值(也就是semval)
					SETVAL 		--->把信号量的值写入ctl_arg.val中
					GETPID 		--->返回sempid值
					GETNCNT 	--->返回semncnt(参考上面内容)
					GETZCNT 	--->返回semzcnt(参考上面内容)
					GETALL 		--->把所有信号量的semvals值写入ctl_arg.array
					SETALL 		--->用ctl_arg.array中的值设置所有信号量的semvals
返回值
	成功	--->0
	失败	--->-1
功能
	获取或者设置信号量的相关属性
	smctl函数依据cmd参数会返回不同的值。它的一个重要用途是为信号量赋初值,因为进程无法直接对信号量的值进行修改
注意
	union semun {							--->这个联合体必须自己定义
		int              val;    /* 当cmd是 SETVAL命令时使用 */
		struct semid_ds *buf;    /* 当cmd是 IPC_STAT, IPC_SET命令中使用 */
		unsigned short  *array;  /* 当cmd是 GETALL, SETALL 命令时使用的指针*/
		struct seminfo  *__buf;  /* 当cmd是 IPC_INFO时使用 */
	};



你可能感兴趣的:(学习笔记,笔记,java,算法)