当前位置: 技术问答>linux和unix
如何在在一个程序中判断另一个程序是否已运行?是哪个命令或函数?
来源: 互联网 发布时间:2016-03-05
本文导语: 如何在在一个程序中判断另一个程序是否已运行?是哪个命令或函数? | 可以用调用ps来得到,这是一个土办法,可以试试。 FILE *fp; int count=0; fp = popen("ps -ef|grep foo1|grep -v grep|wc -l|awk '...
如何在在一个程序中判断另一个程序是否已运行?是哪个命令或函数?
|
可以用调用ps来得到,这是一个土办法,可以试试。
FILE *fp;
int count=0;
fp = popen("ps -ef|grep foo1|grep -v grep|wc -l|awk '{print $1}'","r");
if(fp)
{
count = fscanf("%d",&count);
fclose(fp);
}
if(count > 0)
printf("foo1 running...n");
else
printf("foo1 not running...n");
FILE *fp;
int count=0;
fp = popen("ps -ef|grep foo1|grep -v grep|wc -l|awk '{print $1}'","r");
if(fp)
{
count = fscanf("%d",&count);
fclose(fp);
}
if(count > 0)
printf("foo1 running...n");
else
printf("foo1 not running...n");
|
int rs;
rs = system("killall -0 http");
if(rs == 0){
//http is running...
}
rs = system("killall -0 http");
if(rs == 0){
//http is running...
}
|
一个进程判断另外一个进程是否存在,就是看系统中是否存在该进程。一般就是system调用ps -ef查看是否存在该进程,frankxue的办法已经不土了,不使用system调用而使用popen。不过他应该使用pclose而不是fclose关闭。
应该注意在system或popen之前,应当保证SIGCHLD的处理应该是SIG_DFL,也就是默认处理。如果SIG_IGN可能导致system调用返回255,popen失败,如果使用其他钩子,可能导致调用进程在接收到SIGCHLD并进行处理发生其他问题(看钩子程序里面做了什么,只是有这种可能性)
应该注意在system或popen之前,应当保证SIGCHLD的处理应该是SIG_DFL,也就是默认处理。如果SIG_IGN可能导致system调用返回255,popen失败,如果使用其他钩子,可能导致调用进程在接收到SIGCHLD并进行处理发生其他问题(看钩子程序里面做了什么,只是有这种可能性)