发信人: tcpip (俺的昵称改了), 信区: cnunix
标  题: 怎样由进程名称得到进程号--受限C函数
发信站: 哈工大紫丁香 (Sun Sep 26 15:28:41 1999), 转信

发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Mon Aug 17 17:23:31 1998), 转信


之所以是“受限”的,是因为本文的getpidbyname方法的结果与调用该方法的进程权限
有关,solaris的进程活动情况在文件系统中是有备份的,泥看一下/proc目录就知道了,
每一个活动进程在该目录下都占有一个子目录,该子目录的名字就是进程号,目录主则
与进程主相同,所以只要你够权限进入各个子目录,就当然能用下面的方法getpidbyname

该方法适用于某用户查自己的进程情况或者适用于root查所有用户的进程,本方法抄袭
精华区的unix编程faq呵呵不好意思,只不过faq里面少了头文件我加上了;)

     #include <sys/types.h>
     #include <sys/old_procfs.h>
     #include <dirent.h>
     #include <unistd.h>
     #include <fcntl.h>
     #include <stropts.h>


     pid_t getpidbyname(char *name,pid_t skipit)
     {
         DIR  *dp;
         struct dirent *dirp;
         prpsinfo_t retval;
         int fd;
         pid_t ourretval=-1;

         if((dp=opendir("/proc"))==NULL){
             return -1;
         }
         chdir("/proc");
         while((dirp=readdir(dp))!=NULL){
             if(dirp->d_name[0]!='.'){
                 if((fd=open(dirp->d_name,O_RDONLY))!=-1){
                     if(ioctl(fd,PIOCPSINFO,&retval)!=-1){
                         if(!strcmp(retval.pr_fname,name)){
                             ourretval=(pid_t)atoi(dirp->d_name);
                             if(skipit!=-1 && ourretval==skipit){
                                 ourretval=-1;
                             }
                             else{
                                 close(fd);
                                 break;
                             }
                         }
                     }
                     close(fd);
                 }
             }
         }
         closedir(dp);
         return ourretval;
     }

BTW: 我对该方法也是一知半解,主要是因为ioctl部分,也没时间详细追究
比如我调用getpidbyname("/usr/sbin/inetd -s")或者
getpidbyname("/usr/sbin/inetd")都得不到inetd的进程号,不知道带参数的
进程号是怎么个表示,欢迎大家补充

--

        ******************************************************
                
               青岛啤酒,可能是世界上最好的啤酒 。。。 。。。

        ******************************************************

※ 修改:.trueip 于 Sep 26 15:32:27 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.084毫秒