进程互斥----ttylock()类似原理实现
2013-12-02 20:39
886 查看
之前帮朋友看了一下代码,他想用ttylock(),ttyunlock()系列函数去锁定/dev/ttyS0,但是编译时找不到这些函数,后来我发现这个函数是AIX上的,后来看了一下他的原理。
故按其原理实了如下函数:用以在进程启动时杀掉已经启动的相同进程。
int check_lock(char*file){
FILE*fd;
int bpid;
fd=fopen(file,"r");
if(fd==NULL){
if(errno==2){
fd=fopen(file,"w+");
if(fd==NULL){ return -1;}
}
return -1;
}
fscanf(fd," %d",&bpid);
fclose(fd);
if(bpid!=getpid()){
if(kill(bpid,0)==0){
return bpid; ////有进程已经运行
}
return 0; //no locked
}
return 1; //our locked
}
int write_lock(char*file){
FILE*fd;
int bpid=check_lock(file);
if(bpid>1){
if(0!=kill(bpid,9)){ //强制杀死进程
return -1;
}
sleep(1); //进程消失还要延迟一会
}
fd=fopen(file,"w");
if(fd==NULL){
return -1;
}
fprintf(fd," %10d\n",getpid());
fclose(fd);
return 0;
}
故按其原理实了如下函数:用以在进程启动时杀掉已经启动的相同进程。
int check_lock(char*file){
FILE*fd;
int bpid;
fd=fopen(file,"r");
if(fd==NULL){
if(errno==2){
fd=fopen(file,"w+");
if(fd==NULL){ return -1;}
}
return -1;
}
fscanf(fd," %d",&bpid);
fclose(fd);
if(bpid!=getpid()){
if(kill(bpid,0)==0){
return bpid; ////有进程已经运行
}
return 0; //no locked
}
return 1; //our locked
}
int write_lock(char*file){
FILE*fd;
int bpid=check_lock(file);
if(bpid>1){
if(0!=kill(bpid,9)){ //强制杀死进程
return -1;
}
sleep(1); //进程消失还要延迟一会
}
fd=fopen(file,"w");
if(fd==NULL){
return -1;
}
fprintf(fd," %10d\n",getpid());
fclose(fd);
return 0;
}
相关文章推荐
- Python:使用threading模块实现多线程编程四[使用Lock互斥锁]
- 深入分析AbstractQueuedSynchronizer独占锁的实现原理:ReentranLock
- 轻松学习java可重入锁(ReentrantLock)的实现原理
- 如何用PV原语实现进程间的互斥与同步(转载)
- 使用临界段实现优化的进程间同步对象-原理和实现
- ReentrantLock 以及 AQS 实现原理
- ReentrantLock实现原理
- Java并发包中Lock的实现原理
- ReentrantLock实现原理深入探究
- Python:使用threading模块实现多线程编程四[使用Lock互斥锁]
- Linux 守护进程的原理与实现
- 使用临界段实现优化的进程间同步对象-原理和实现 (转)
- 使用临界段原理实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- ReentrantLock 实现原理深入探究
- 多线程基础之三:使用event, mutex, semaphore实现多进程间互斥
- 重入锁ReentrantLock实现原理
- ReentrantLock实现原理深入探究
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- 类似google拖拽效果的原理实现(来自codeproject)