14 个解决方案
#1
调用ps指令查看系统运行的进程,然后查找有没有这个进程
#2
运行ps命令查找,要是知道pid可以使用kill -0 pid来看该pid进程是否还在运行
#3
谢谢你的回复。。。这我知道啊。system("ps -ef|grep 程序名"),我想知道大概或者具体怎么做。
#4
popen
#5
谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?
#6
4楼意思是用popen函数,把ps命令的输出重定向到管道,然后根据输出结果确定程序是否运行。
自己man 一下popen函数。
#7
最好不用system("ps -ef|grep 程序名")方式,这样类似程序名*的情况也会返回,建议用kill -0方式
#8
楼上的意见都ok
#9
谢谢你们的回复,可是2个没有任何关系的进程,既不是父子进程,也不是兄弟进程,有什么好的方法得到他的pid呢?
#10
#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
根据程序名称在/proc文件系统查找,如果查找到了说明还在运行
在proc下还可以取pid
#14
谢谢大家。。proc文件系统 下貌似看不到在运行的程序名,pid还是有。
#1
调用ps指令查看系统运行的进程,然后查找有没有这个进程
#2
运行ps命令查找,要是知道pid可以使用kill -0 pid来看该pid进程是否还在运行
#3
谢谢你的回复。。。这我知道啊。system("ps -ef|grep 程序名"),我想知道大概或者具体怎么做。
#4
popen
#5
谢谢你的回复。。太简单了啊。能详细点吗?先干什么后干什么啊?
#6
4楼意思是用popen函数,把ps命令的输出重定向到管道,然后根据输出结果确定程序是否运行。
自己man 一下popen函数。
#7
最好不用system("ps -ef|grep 程序名")方式,这样类似程序名*的情况也会返回,建议用kill -0方式
#8
楼上的意见都ok
#9
谢谢你们的回复,可是2个没有任何关系的进程,既不是父子进程,也不是兄弟进程,有什么好的方法得到他的pid呢?
#10
#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
根据程序名称在/proc文件系统查找,如果查找到了说明还在运行
在proc下还可以取pid
#14
谢谢大家。。proc文件系统 下貌似看不到在运行的程序名,pid还是有。