免费注册 查看新帖 |

Chinaunix

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

[函数] 有没有得到进程ID的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-11 01:02 |只看该作者 |倒序浏览
有没有得到进程ID的函数,我说的不是getpid那种方式,是根据程序名,得到相应的进程id

论坛徽章:
0
2 [报告]
发表于 2009-05-11 01:11 |只看该作者
ps -ax -o pid,cmd | grep "name" | grep -v "grep name" | cut -f1

论坛徽章:
0
3 [报告]
发表于 2009-05-11 01:15 |只看该作者
我晕!!!!
楼上的我说的是C函数,不是命令!

论坛徽章:
0
4 [报告]
发表于 2009-05-11 01:19 |只看该作者
原帖由 osmanthusgfy 于 2009-5-11 01:15 发表
我晕!!!!
楼上的我说的是C函数,不是命令!


哦,那我也等待答案,看看有没有这样的C函数。。

论坛徽章:
0
5 [报告]
发表于 2009-05-11 01:27 |只看该作者
一个强人的代码:

  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 */
复制代码


参考:http://www.lslnet.com/linux/dosc1/57/linux-383181.htm

论坛徽章:
0
6 [报告]
发表于 2009-05-11 08:00 |只看该作者
原帖由 osmanthusgfy 于 2009-5-11 01:27 发表
一个强人的代码:

static pid_t getpidbyname ( char * name )
{
        DIR           *dirHandle;  /* 目录句柄   */
        struct dirent *dirEntry;   /* 单个目录项 */
        psinfo_t      pr ...

这个只对支持proc文件系统的操作系统有效

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2009-05-11 09:02 |只看该作者

回复 #5 osmanthusgfy 的帖子

支持proc的话,这个程序倒是挺不错的,呵呵

论坛徽章:
0
8 [报告]
发表于 2009-05-11 09:19 |只看该作者
man pidof

论坛徽章:
0
9 [报告]
发表于 2009-05-11 09:30 |只看该作者
pidof httpd | xargs kill

很好用

论坛徽章:
0
10 [报告]
发表于 2009-05-11 09:35 |只看该作者
系统没有这样的函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP