URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 40 » 如何查看进程是否在运行
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  TI专版
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
如何查看进程是否在运行
如何查看进程是否在运行 - LockTime [2005-02-23 12:57 | 80 byte(s)]
 
Re: 如何查看进程是否在运行 - lonelyflyer [2005-02-23 19:07 | 2,943 byte(s)]
 
Re: 如何查看进程是否在运行 - LockTime [2005-02-24 12:06 | 45 byte(s)]
 
Re: 如何查看进程是否在运行 - tclwp [2005-02-23 20:03 | 1,594 byte(s)]
 
Re: 如何查看进程是否在运行 - h_falls [2005-02-23 20:39 | 76 byte(s)]
 
Re: 如何查看进程是否在运行 - whone23 [2005-02-24 15:49 | 52 byte(s)]
 
Re: 如何查看进程是否在运行 - TecHunter [2005-02-25 01:28 | 81 byte(s)]
 
Re: 如何查看进程是否在运行 - h_falls [2005-02-24 16:55 | 228 byte(s)]
 
Re: 如何查看进程是否在运行 - tclwp [2005-02-23 23:24 | 87 byte(s)]
 
Re: 如何查看进程是否在运行 - h_falls [2005-02-23 23:50 | 73 byte(s)]
 
Re: 如何查看进程是否在运行 - h_falls [2005-02-23 18:32 | 34 byte(s)]
 
Re: 如何查看进程是否在运行 - gotop167 [2005-02-23 17:16 | 95 byte(s)]
 
Subject: 如何查看进程是否在运行
Author: LockTime    Posted: 2005-02-23 12:57    Length: 80 byte(s)
[Original] [Print] [Top]
请问大家,如何用C实现 查看某个程序是否在运行。 给点思路

谢谢
----
珍惜时间,留住今天.
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: gotop167    Posted: 2005-02-23 17:16    Length: 95 byte(s)
[Original] [Print] [Top]
两个办法
1.看ps代码,得到你想要的
2.写个模块,从进程PCB中比较文件名即可知道!
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: h_falls    Posted: 2005-02-23 18:32    Length: 34 byte(s)
[Original] [Print] [Top]
看看 /var/run 下面的东西是干嘛用的
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: lonelyflyer    Posted: 2005-02-23 19:07    Length: 2,943 byte(s)
[Original] [Print] [Top]

void CatchMonitee()
{
DIR* procDir;
struct dirent* entry;

g_config.hitA = 0;
g_config.hitB = 0;

procDir = opendir( "/proc" );

while( (entry = readdir( procDir )) != NULL )
{
int valid;
int i;

valid = 1;
for( i = 0; entry->d_name[i] != ''; i++ )
{
if( entry->d_name[i] < '0' || entry->d_name[i] >
'9' )
{
valid = 0;
break;
}
}

if( 1 == valid )
{
char entryName[64] = "/proc/";
char target[TargetLen] = "";
char* shortname = NULL;
/*must be init, readlink do not append null terminte*/

strcat( entryName, entry->d_name );
strcat( entryName, "/exe" );

memset( target, 0, TargetLen );
readlink( entryName, target, sizeof(target) );

if( strlen(target) == 0 )
continue;

shortname = basename( target );

if( ! g_config.hitA && strstr( g_config.moniteePathA,
shortname ) != NULL )
{
g_config.hitA = 1;
g_monitee[0] = atoi( entry->d_name );
} else if( ! g_config.hitB && strstr(
g_config.moniteePathB, shortname ) != NULL ) {
g_config.hitB = 1;
g_monitee[1] = atoi( entry->d_name );
}

if( g_config.hitA && g_config.hitB )
break;
}
}

if( 0 == g_config.hitA )
g_monitee[0] = 0;
if( 0 == g_config.hitB )
g_monitee[1] = 0;

closedir( procDir );
}


这里是监控两个进程,自己改吧
----
General Assembly resolution 217 A (III)
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: tclwp    Posted: 2005-02-23 20:03    Length: 1,594 byte(s)
[Original] [Print] [Top]
这是我很久以前写的, 很简单 ,可直接用 , 就是粗糙了点
gcc -o example example.c
./example <process name>

#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<limits.h>

#define BUFSZ PIPE_BUF

void err_quit(char *msg)
{
perror(msg);
exit(EXIT_FAILURE);

}

int main(int argc, char *argv[])
{
FILE* fp;
int count;
char buf[BUFSZ];
char command[150];


if(argc != 2)
{
printf("USAGE: example <process name> ");
exit(EXIT_SUCCESS);
}
else
sprintf(command, "ps -C %s|wc -l", argv[1] );


if((fp = popen(command,"r")) == NULL)
err_quit("popen");

if( (fgets(buf,BUFSZ,fp))!= NULL )
{
count = atoi(buf);
if((count - 1) == 0)
printf("%s not found ",argv[1]);
else
printf("process : %s total is %d ",argv[1],(count - 1));

}

pclose(fp);


exit(EXIT_SUCCESS);


}
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: h_falls    Posted: 2005-02-23 20:39    Length: 76 byte(s)
[Original] [Print] [Top]
文件名是靠不住的

最终还是要靠 /var/run/xxx.pid 这样的办法
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: tclwp    Posted: 2005-02-23 23:24    Length: 87 byte(s)
[Original] [Print] [Top]
如果我们手上只有该程序的binary
而该程序又不愿往/var/run下面写自己的pid怎么办呢
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: h_falls    Posted: 2005-02-23 23:50    Length: 73 byte(s)
[Original] [Print] [Top]


用一个父进程fork你的binary, 父进程去写pid ,然后退出
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: LockTime    Posted: 2005-02-24 12:06    Length: 45 byte(s)
[Original] [Print] [Top]
真的非常感谢大家。谢谢。

----
珍惜时间,留住今天.
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: whone23    Posted: 2005-02-24 15:49    Length: 52 byte(s)
[Original] [Print] [Top]
加入Ctrl+C中断程序,没有删掉原来生成的pid文件怎么办
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: h_falls    Posted: 2005-02-24 16:55    Length: 228 byte(s)
[Original] [Print] [Top]
你检查 foo.pid 的时候,不能只看foo.pid文件是否存在就判断程序是否在运行啊

还要检查其内容,比如其内容是132, 你就要看 132这个进程是否存在,如果存在,其 /proc/132/cmd /proc/132/exe 的值是否是正确的... 诸如此类。
[Original] [Print] [Top]
Subject: Re: 如何查看进程是否在运行
Author: TecHunter    Posted: 2005-02-25 01:28    Length: 81 byte(s)
[Original] [Print] [Top]
好像一般的pid文件建立起来写入pid之后应该马上unlink掉,这样Ctrl+C退出也会自动删除的
[Original] [Print] [Top]
« Previous thread
请问printk是在哪一个头文件里被声明的?
C/C++编程版
40
Next thread »
关于reboot时的lvm问题
     

Copyright © 2007~2009 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
webmaster: webmaster@unixresources.net
This page created on 2009-09-07 16:44:05, cost 0.0220539569855 ms.