当前位置: 技术问答>linux和unix
如何判断进程是否存在,防止重复启动?谢谢!
来源: 互联网 发布时间:2015-03-04
本文导语: 有代码给出为好! | int detect_process(char * process_name) { FILE *ptr; char buff[512]; char ps[128]; sprintf(ps,"ps -e | grep -c ' %s$'",process_name); ...
有代码给出为好!
|
int detect_process(char * process_name)
{
FILE *ptr;
char buff[512];
char ps[128];
sprintf(ps,"ps -e | grep -c ' %s$'",process_name);
strcpy(buff,"ABNORMAL");
if((ptr=popen(ps, "r")) != NULL)
{
while (fgets(buff, 512, ptr) != NULL)
{
if(atoi(buff)>=2)
{
pclose(ptr);
return CONFLICT;
}
}
}
if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/
return ERROR;
pclose(ptr);
return NOERROR;
}
{
FILE *ptr;
char buff[512];
char ps[128];
sprintf(ps,"ps -e | grep -c ' %s$'",process_name);
strcpy(buff,"ABNORMAL");
if((ptr=popen(ps, "r")) != NULL)
{
while (fgets(buff, 512, ptr) != NULL)
{
if(atoi(buff)>=2)
{
pclose(ptr);
return CONFLICT;
}
}
}
if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/
return ERROR;
pclose(ptr);
return NOERROR;
}
|
用ps消耗大,你可以给你想查的那个进程发一个消息,看看它能不能接到,这样做的话比较准确。
kill(process_id,用户自定义消息)看看它的return值,在进程中加入对这个消息的捕获。不要处理它就可以了
kill(process_id,用户自定义消息)看看它的return值,在进程中加入对这个消息的捕获。不要处理它就可以了
|
如果用msg来测试进程是否正常,
那可以直接把该进程的PID用msg返回
那可以直接把该进程的PID用msg返回