当前位置: 技术问答>linux和unix
*******程序中如何判断进程是否在运行?******
来源: 互联网 发布时间:2015-08-29
本文导语: 如题 | 如果你知道这个进程的进程号,那么我就接分了。 用ps或者在/proc下去找都可是实现不过不是好办法。 你只要对你已知的这个进程发一个信号就可以了,如果返回错误就检查一下错误码...
如题
|
如果你知道这个进程的进程号,那么我就接分了。
用ps或者在/proc下去找都可是实现不过不是好办法。
你只要对你已知的这个进程发一个信号就可以了,如果返回错误就检查一下错误码是不是进程不存在,这个信号最好是0信号。
一般为了简单只要返回0我都认为这个进程存在,返回-1我就认为没有这个进程。切记最好用0号信号。
用ps或者在/proc下去找都可是实现不过不是好办法。
你只要对你已知的这个进程发一个信号就可以了,如果返回错误就检查一下错误码是不是进程不存在,这个信号最好是0信号。
一般为了简单只要返回0我都认为这个进程存在,返回-1我就认为没有这个进程。切记最好用0号信号。
|
DIR *dir;
struct dirent *next;
pid_t* pidList=NULL;
int i=0;
dir = opendir("/proc");
if (!dir)
{
printf("Cannot open /proc");
exit(1);
}
while ((next = readdir(dir)) != NULL) {
FILE *f;
char filename[MAXNAME];
char buffer[BUF_SIZE];
char name[BUF_SIZE];
if (strcmp(next->d_name, "..") == 0)
continue;
if (!isdigit(*next->d_name))
continue;
sprintf(filename, "/proc/%s/f", next->d_name);
if (! (f = fopen(filename, "r")) ) {
continue;
}
if (fgets(buffer, BUF_SIZE-1, f) == NULL) {
fclose(f);
continue;
}
fclose(f);
...
如果为了简单,可以直接调用system();
eg:
system("find /proc |grep programname >file");
然后判断file是否为空
Good Luck!
struct dirent *next;
pid_t* pidList=NULL;
int i=0;
dir = opendir("/proc");
if (!dir)
{
printf("Cannot open /proc");
exit(1);
}
while ((next = readdir(dir)) != NULL) {
FILE *f;
char filename[MAXNAME];
char buffer[BUF_SIZE];
char name[BUF_SIZE];
if (strcmp(next->d_name, "..") == 0)
continue;
if (!isdigit(*next->d_name))
continue;
sprintf(filename, "/proc/%s/f", next->d_name);
if (! (f = fopen(filename, "r")) ) {
continue;
}
if (fgets(buffer, BUF_SIZE-1, f) == NULL) {
fclose(f);
continue;
}
fclose(f);
...
如果为了简单,可以直接调用system();
eg:
system("find /proc |grep programname >file");
然后判断file是否为空
Good Luck!
|
一般的服务器程序启动都会在/var/run生成自己的一个pid文件,
用来标识是否程序已经启动
用来标识是否程序已经启动
|
# pidof
|
楼主问的是如何判断TASK_RUNNING 状态 还是 问这个进程是否存在?
|
那用ps命令就够了