linux c怎样检查另一个程序是否在运行。没运行就运行他。

时间:2022-08-29 18:48:21
在linux下,我想通过一个linux c程序定时检查另一个程序是否在运行,如果在运行就不运行了,如果没运行,就运行他。谢谢了。。。。。。。

14 个解决方案

#1


调用ps指令查看系统运行的进程,然后查找有没有这个进程

#2


运行ps命令查找,要是知道pid可以使用kill -0 pid来看该pid进程是否还在运行

#3


谢谢你的回复。。。这我知道啊。system("ps -ef|grep 程序名"),我想知道大概或者具体怎么做。

#4


popen

#5


谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?

#6


引用 5 楼 ljwtarena 的回复:
谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?

4楼意思是用popen函数,把ps命令的输出重定向到管道,然后根据输出结果确定程序是否运行。
自己man 一下popen函数。

#7


最好不用system("ps -ef|grep 程序名")方式,这样类似程序名*的情况也会返回,建议用kill -0方式

#8


楼上的意见都ok

#9


谢谢你们的回复,可是2个没有任何关系的进程,既不是父子进程,也不是兄弟进程,有什么好的方法得到他的pid呢?

#10


该回复于2011-12-16 09:04:12被版主删除

#11


写个shell脚本检测不行吗

#12





#include <stdio.h>
#include <string.h>
/*get the pid array*/
static int *get_pid(char *key)
{
char buff[80];
int *pid = NULL;
int i = 0;
char *ret;
pid = (int *)malloc(8*sizeof(int));
if (NULL == pid)
{
printf("pid malloc error!\n");
}

memset(pid,0,8*sizeof(int));
sprintf(buff,"pidof %s",key);
FILE *pidreader = popen(buff,"r");
memset(buff,0,80);

ret = fgets(buff,79,pidred);
pclose(pidreader);

ret = strtok(buff," ");
while (ret != NULL)
{
pid[i++]=atoi(ret);
ret =strtok(NULL," ");
}
return pid;

}



/*this function  is usesd to signal the process with "kill -10" */
void stop_process()
{

int *pid=get_pid("your_process_name");
int i = 0;
while (pid[i] )
{
//printf("signal to pid=%d\n",pid[i]);
kill(pid[i++],10);
}
free(pid);


}


这是我以前写的一个类似的函数。应该对你有用。











#13


假如已知程序名:
根据程序名称在/proc文件系统查找,如果查找到了说明还在运行
在proc下还可以取pid

#14


谢谢大家。。proc文件系统 下貌似看不到在运行的程序名,pid还是有。

#1


调用ps指令查看系统运行的进程,然后查找有没有这个进程

#2


运行ps命令查找,要是知道pid可以使用kill -0 pid来看该pid进程是否还在运行

#3


谢谢你的回复。。。这我知道啊。system("ps -ef|grep 程序名"),我想知道大概或者具体怎么做。

#4


popen

#5


谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?

#6


引用 5 楼 ljwtarena 的回复:
谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?

4楼意思是用popen函数,把ps命令的输出重定向到管道,然后根据输出结果确定程序是否运行。
自己man 一下popen函数。

#7


最好不用system("ps -ef|grep 程序名")方式,这样类似程序名*的情况也会返回,建议用kill -0方式

#8


楼上的意见都ok

#9


谢谢你们的回复,可是2个没有任何关系的进程,既不是父子进程,也不是兄弟进程,有什么好的方法得到他的pid呢?

#10


该回复于2011-12-16 09:04:12被版主删除

#11


写个shell脚本检测不行吗

#12





#include <stdio.h>
#include <string.h>
/*get the pid array*/
static int *get_pid(char *key)
{
char buff[80];
int *pid = NULL;
int i = 0;
char *ret;
pid = (int *)malloc(8*sizeof(int));
if (NULL == pid)
{
printf("pid malloc error!\n");
}

memset(pid,0,8*sizeof(int));
sprintf(buff,"pidof %s",key);
FILE *pidreader = popen(buff,"r");
memset(buff,0,80);

ret = fgets(buff,79,pidred);
pclose(pidreader);

ret = strtok(buff," ");
while (ret != NULL)
{
pid[i++]=atoi(ret);
ret =strtok(NULL," ");
}
return pid;

}



/*this function  is usesd to signal the process with "kill -10" */
void stop_process()
{

int *pid=get_pid("your_process_name");
int i = 0;
while (pid[i] )
{
//printf("signal to pid=%d\n",pid[i]);
kill(pid[i++],10);
}
free(pid);


}


这是我以前写的一个类似的函数。应该对你有用。











#13


假如已知程序名:
根据程序名称在/proc文件系统查找,如果查找到了说明还在运行
在proc下还可以取pid

#14


谢谢大家。。proc文件系统 下貌似看不到在运行的程序名,pid还是有。