当前位置: 技术问答>linux和unix
求一个函数linux c/c++ ,检测程序是否运行着,bool CheckRuning(const string name);
来源: 互联网 发布时间:2016-11-19
本文导语: 本帖最后由 ruikflyer2004 于 2011-04-01 12:13:35 编辑 输入程序名,输出该程序是否运行着 bool CheckRuning(const string name); c的也可以,希望哪位能给个完全无错的代码。谢谢了。 实在不行给个思路或参考吧。 | ...
bool CheckRuning(const string name);
c的也可以,希望哪位能给个完全无错的代码。谢谢了。
实在不行给个思路或参考吧。
|
/************************************
函数描述:通过系统 ps 命令获取进程号
约束 :进程名称长度上限100字节
************************************/
bool CheckRuning(char *proc)
{
FILE *pp;
pid_t pid, me;
char cmd[128], buf[128], comm[128];
if( proc == NULL || *proc == 0 ) return(false);
sprintf(cmd, "ps -eo comm,pid|grep ^%.100s", proc);
if( (pp = popen(cmd, "r")) != NULL )
{
me = getpid();
while( ! feof(pp) )
{
pid = 0;
if( fgets(buf, sizeof(buf), pp) == NULL ) break;
sscanf(buf, "%100s%d", comm, &pid);
if( (strcmp(comm, proc) == 0) && (pid != me) )
{
pclose(pp);
return(true);
}
}
pclose(pp);
}
return(false);
}
|
int check_runing(char* prog)
{
char cmd[128] = "ps -elf | grep "";
int len = strlen(prog);
FILE* fp;
int val;
char* other = "" | wc -l > tmp";
if(len > 128 - sizeof(cmd) - strlen(other))
{
printf("program name too longn");
_exit(0);
}
strncat(cmd, prog, len);
strncat(cmd, other, strlen(other));
system(cmd);
fp = fopen("./tmp", "r");
fscanf(fp, "%d", &val);
fclose(fp);
unlink("./tmp");
if(val > 2)
return val;
else
return 0;
}
其实不是太合适,这样创建了一个临时文件,如果当前目录下也有就麻烦了,可以用tmpname()创建一个临时文件,那样有点麻烦不过更严谨
{
char cmd[128] = "ps -elf | grep "";
int len = strlen(prog);
FILE* fp;
int val;
char* other = "" | wc -l > tmp";
if(len > 128 - sizeof(cmd) - strlen(other))
{
printf("program name too longn");
_exit(0);
}
strncat(cmd, prog, len);
strncat(cmd, other, strlen(other));
system(cmd);
fp = fopen("./tmp", "r");
fscanf(fp, "%d", &val);
fclose(fp);
unlink("./tmp");
if(val > 2)
return val;
else
return 0;
}
其实不是太合适,这样创建了一个临时文件,如果当前目录下也有就麻烦了,可以用tmpname()创建一个临时文件,那样有点麻烦不过更严谨
|
给你个思路
你到proc目录下枚举所有的数字目录
然后取出目录中status文件的第一行,也就是程序的名称
root@xld1:/proc/1# cat status
Name: init
State: S (sleeping)
Tgid: 1
例如这个进程1的名称就是init
循环一次就知道你的进程还在不在了
你到proc目录下枚举所有的数字目录
然后取出目录中status文件的第一行,也就是程序的名称
root@xld1:/proc/1# cat status
Name: init
State: S (sleeping)
Tgid: 1
例如这个进程1的名称就是init
循环一次就知道你的进程还在不在了