📄 cmutex.cpp
字号:
#include "CMuTex.h"///////////////////////////////////////////////////////////////////////////////查找指定进程号的进程是否退出int CMuTex::ChiProIsLive(int pid){ FILE *fp; char sCmd[200], sPid[20]; sprintf(sCmd, "ps -elf | sed '/%d/!d' |", pid ); sprintf(sCmd, "%s awk '{FS=\" \"}{print $4}' |", sCmd); sprintf(sCmd, "%s sed '/%d/!d' 2>/dev/null", sCmd, pid); fp=popen(sCmd, "r" ); if( fp == NULL ) { return 2; } memset( sPid, 0, sizeof(sPid)); fread((void *)sPid, sizeof(char), 8, fp ); pclose(fp); if(atoi(sPid) != pid ) { return 0; //the process not exist } else { return 1; //the process is exist }} ///////////////////////////////////////////////////////////////////////////////等待获得互斥量的控制权int CMuTex::WaitMutex(char * lockfile){ return my_lock_wait(lockfile);}///////////////////////////////////////////////////////////////////////////////释放对互斥量的控制权int CMuTex::ReleaseMutex(){ return my_lock_release();}///////////////////////////////////////////////////////////////////////////////保存指定索引的子进程信息void CMuTex::SetChiProInfo(int index, pid_t chipid, int socket, EChildState chistate){ m_ChiInfo[index].m_chiPid = chipid; m_ChiInfo[index].m_chiState = chistate; m_ChiInfo[index].m_socket = socket;}///////////////////////////////////////////////////////////////////////////////保存指定进程ID的子进程信息void CMuTex::SetChiProInfoEx(pid_t chipid, EChildState chistate){ int I; for(I = 0; I < m_childcount; I++) { if(m_ChiInfo[I].m_chiPid == chipid) { m_ChiInfo[I].m_chiState = chistate; break; } }}///////////////////////////////////////////////////////////////////////////////得到子进程的状态EChildState CMuTex::GetChiProState(int index){ return m_ChiInfo[index].m_chiState;}///////////////////////////////////////////////////////////////////////////////得到子进程的IDpid_t CMuTex::GetChiProPid(int index){ return m_ChiInfo[index].m_chiPid;}///////////////////////////////////////////////////////////////////////////////监控子进程的状态int CMuTex::WatchChiPro(){ int I; for(I = 0; I < m_childcount; I++) { if((m_ChiInfo[I].m_chiPid != -1) && !ChiProIsLive(m_ChiInfo[I].m_chiPid)) { m_ChiInfo[I].m_chiState = csDead; } } return 0;}//获得子进程的套接字int CMuTex::GetChiProSoc(int index, int pid){ int i=0; if(pid != 0) { for(i=0; i<m_childcount; i++) { if(m_ChiInfo[i].m_chiPid == pid) { return m_ChiInfo[i].m_socket; } } } else { return m_ChiInfo[index].m_socket; } return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -