CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

怎么样在Linux编程中查看某个指定的程序是否在运行?

楼主fashion1840(唐傲)2004-09-01 12:45:33 在 Linux/Unix社区 / 程序开发区 提问

在程序中查某个指定的程序在运行,或不在运行。如果在运行,怎么样得到它的进程ID? 问题点数:100、回复次数:14Top

1 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 12:48:18 得分 5

ps   -ax|grep   program_name  
  if   found,   the   program   is   running,   or   the   program   is   not   running.Top

2 楼zhushizu(从来就没有救世祖)回复于 2004-09-01 13:44:36 得分 5

是呀,我也是想了好久。。关注中。。。Top

3 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 14:02:22 得分 50

#include   <stdio.h>  
  #include   <stddef.h>  
  #include   <sys/types.h>  
  #include   <dirent.h>  
  #include   <signal.h>  
   
  //   get   pid   by   program   name  
   
  int   main   (int   argc,   char*   argv[])  
  {  
  DIR   *pdir   =   NULL;  
  struct   dirent   *pde   =   NULL;  
  FILE   *pf   =   NULL;  
  char   buff[128];  
  char   buff2[128];  
  char   *pstr   =   NULL;  
  int   pid,   ppid;  
  int   n;  
  int   i;  
   
  pdir   =   opendir("/proc");  
  if   (!pdir)  
  {  
  perror("open   /proc   fail.\n");  
  return   -1;  
  }  
   
  while   ((pde   =   readdir(pdir)))  
  {  
  if   ((pde->d_name[0]   <   '0')  
  ||   (pde->d_name[0]   >   '9'))  
  {  
  continue;  
  }  
  sprintf(buff,   "/proc/%s/status",   pde->d_name);  
  pf   =   fopen(buff,   "r");  
  if   (pf)  
  {  
  n   =   fread(buff,   1,   127,   pf);  
  close(pf);  
  buff[n]   =   0;  
   
  for   (i   =   0;   i   <   n;   i++)  
  {  
  if   ('\n'   ==   buff[i])  
  {  
  buff[i]   =   0;  
  break;  
  }  
  }  
  //printf("==   (%s)   ==\n",   buff);  
  n   =   i;    
  for   (i   =   0;   i   <   n;   i++)  
  {  
  if   (('   '   ==   buff[i])   ||   ('\t'   ==   buff[i]))  
  {  
  break;  
  }  
  }  
   
  for   (;   i   <   n;   i++)  
  {  
  if   (('   '   !=   buff[i])   &&   ('\t'   !=   buff[i]))  
  {  
  break;  
  }  
  }  
   
  //printf("NAME:   (%s)\n",   buff   +   i);  
   
  if   (0   ==   strcmp(buff   +   i,   argv[1]))  
  {  
  printf("found   %s,   pid   =   %d\n",   buff   +   i,   atoi(pde->d_name));  
  break;  
  }  
  }  
  }  
   
  closedir(pdir);  
  return   0;  
  }  
  Top

4 楼lanting918(做人,要厚道!)回复于 2004-09-01 16:24:18 得分 10

system("ps   -C   proname");Top

5 楼fashion1840(唐傲)回复于 2004-09-01 16:59:21 得分 0

谢谢,老猫的。要不你留个MSN,或QQ,以后联系你。请多指教。Top

6 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 17:06:34 得分 0

“偶以不用QQ很多年,MSN那偶有玩不转”,活活Top

7 楼fashion1840(唐傲)回复于 2004-09-01 17:10:37 得分 0

哦。那你不是整个一个活现代吗??吼吼,开玩笑的。那你总有mail吧。yahoo   messager,icq,aol,一个也没有吗???  
  Top

8 楼renhaobin2000()回复于 2004-09-01 17:19:10 得分 5

ps   -AHTop

9 楼littleline()回复于 2004-09-01 17:41:55 得分 5

psTop

10 楼fashion1840(唐傲)回复于 2004-09-01 18:13:15 得分 0

ps   我也知道啊。但就一个PS能搞定吗???  
  答案是明确的,不行。老猫的可行。,thank   you!Top

11 楼CoolQ()回复于 2004-09-01 18:15:16 得分 5

try   to   use   pidof   ProcessName   instead!Top

12 楼pacman2000(pacman)(影子传说)回复于 2004-09-01 18:19:15 得分 5

呵呵。。。   老猫好像不在国内的样子。。。Top

13 楼lifeixiao(李飞笑)回复于 2004-09-02 12:41:51 得分 5

ps   -ef|grep   program_cmdTop

14 楼dragonhux(dragon(清水))回复于 2004-09-02 13:34:34 得分 5

老猫给的答案很标准啊,为什么还没结贴?  
   
  ps也是通过读取proc文件系统来  
  获取计算机当前的运行信息  
  如:任务、进程、内存、CPU、硬件等等。Top

相关问题

  • LINUX编程
  • Linux-PAM编程
  • LINUX下C++编程如何控制光标的位置,以达到在指定位置输出字符
  • 请高手指定,关于MCI编程
  • Linux编程问题
  • linux下socket编程
  • Linux下编程的问题?
  • linux下的c++编程
  • linux下的c 编程
  • linux编程小的问题

关键词

  • program
  • null
  • pdir
  • 运行
  • buff
  • 程序
  • pde
  • pf
  • proc
  • include

得分解答快速导航

  • 帖主:fashion1840
  • blh
  • zhushizu
  • blh
  • lanting918
  • renhaobin2000
  • littleline
  • CoolQ
  • pacman2000
  • lifeixiao
  • dragonhux

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo