免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5081 | 回复: 6
打印 上一主题 下一主题

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-08 09:32 |只看该作者 |倒序浏览
我有一个进程知道,要发送信号的进程名,但不知道对应的进程ID,所以调用kill()函数不行,为了能够调用我希望得到与这个进程名匹配的进程ID值,当然使用PS命令从标准输出中截取是可以的,但我希望能从系统函数中作到这一点,毕竟ps也是应用级命令.例外说明的是本进程与发送信号进程虽然是一个用户进程,但没有从属关系,因此使用getpid()、getppid()等函数不起作用的,不知道有没有方法???请大家指教。

论坛徽章:
0
2 [报告]
发表于 2004-09-08 10:12 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

用管道操作,popen("ps -a",再分析输出,得到进程号。如果你知道指定进程的执行文件名称,你可以调用/sbin/pidof "文件名",取得进程号。

论坛徽章:
0
3 [报告]
发表于 2004-09-08 10:18 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

楼上的方法是可以的,但我想由于系统不同ps的使用格式不同,因此程序的移值性不强,如果有系统方法得到,会更好的,而且我调用ps命令不可避免的要调用子进程的标准输出得到,不如系统调用的效率高。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-09-09 20:58 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

应该没有。

论坛徽章:
0
5 [报告]
发表于 2004-09-10 08:31 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

是否能在AIX5的/proc目录中得到进程的这部分信息

论坛徽章:
0
6 [报告]
发表于 2004-09-10 16:56 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

在AIX5下可以如下实现上面关于将进程名转换成进程ID
程序如下:

  1. static pid_t getpidbyname ( char * name )
  2. {
  3.         DIR           *dirHandle;  /* 目录句柄   */
  4.         struct dirent *dirEntry;   /* 单个目录项 */
  5.         psinfo_t      prp;
  6.         pid_t         pid = -1;
  7.         char          strPathName[100];
  8.         FILE          *fp;

  9.         memset(strPathName, 0, 100);

  10.         if( ( dirHandle = opendir( "/proc" ) ) == NULL )
  11.         {
  12.                 return( -1 );
  13.         }
  14.         chdir( "/proc" );
  15.         /* 下面使用相对路径打开文件,所以必须进入/proc */
  16.         while( ( dirEntry = readdir( dirHandle ) ) != NULL )
  17.         {
  18.                 if( dirEntry->;d_name[0] != '.' && strcmp(dirEntry->;d_name,"sys") != 0)
  19.                 {
  20.                         /* 拼加路径 */
  21.                         sprintf(strPathName, "./%s/%s", dirEntry->;d_name, "psinfo");
  22.                         /* 读取文件 */
  23.                         if( ( fp = fopen( strPathName, "rb" ) ) == NULL )
  24.                         {
  25.                                 printf("打开文件[%s]失败!\n", strPathName);
  26.                                 break;
  27.                         }

  28.                         /* 读取数据 */
  29.                         if(fread(&prp, sizeof(psinfo_t), 1, fp) == -1)
  30.                         {
  31.                                 printf("文件读取失败!\n");
  32.                                 fclose(fp);
  33.                                 break;
  34.                         }
  35.                         if ( strcmp( prp.pr_fname, name) == 0 )
  36.                         {
  37.                                 pid = ( pid_t )atoi( dirEntry->;d_name );
  38.                                 break;
  39.                         }
  40.                         fclose( fp );
  41.                 }
  42.         }  /* end of while */
  43.         closedir( dirHandle );
  44.         return( pid );
  45. }  /* end of getpidbyname */
复制代码

希望对以后遇到这个问题的人有用
参考文档IBM的Files Reference的/proc目录部分说名

论坛徽章:
0
7 [报告]
发表于 2004-09-11 00:13 |只看该作者

知道进程名如何得到进程ID(不使用PS命令),有这样的系统调用吗???

好![/img]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP