Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 386, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

linux下如何获取进程的id和命令行参数

liunx上获取进程ID和启动参数的命令主要有以下两个:如ps –ef | grep mysql //查看mysql的进程;查看后台运行的进程;
查看用户的UID、GID及所归属的用户组--ps |grep 后面要加要找的进程。是列出主要的进程。而ps -aux|grep 列出所有的进程 并在其中查找
一般我们用ps -aux|grep 这个命令比较通用,前后台的程序都可以查找。
我们用管道来执行这个命令,并获取相关的信息,示例代码如下:
int Get_cmdline(void)
{
  FILE* ptr;
 char* tok = NULL;
 char* m_sCommand = "ps -ax|grep 进程名";
 int t_id = 0;//进程ID

 char line[128] = {0};
 /*Read data pipeline-----command of execution results*/
    if (ptr = popen(m_sCommand, "r"))
   {
        while (fgets(line, sizeof(line), ptr) != NULL)
        {
            /*Find substring*/
          /*STAT 进程状态(有以下几种)
               *D 无法中断的休眠状态(通常 IO 的进程);R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换(从内核2.6开始无效);
               *X 死掉的进程(从来没见过);Z 僵尸进程;
               *优先级高的进程N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程); 
               *+l 多进程的(使用CLONE_THREAD,类似 NPTL pthreads;+ 位于后台的进程组;
*/
            if(strstr(line,"l+") || strstr(line,"named.conf") || strstr(line,"l"))
            {
                /*find the parametel of cmdline */
                tok = strstr(line,"/");
                if(tok)
                {
                    strcpy(temp,tok+1);
                    strcpy(namedline,strstr(temp,"/"));
                   /*find the id of named*/
                    sscanf(line,"%d",&t_id);
                 }
         }
         break;
   }
     pclose(ptr);
     return SUCESS;/*Custom macro*/
 } 
 else
 {
  return FAIL;
 }

}


posted on 2010-08-08 22:43 Benjamin 阅读(6828) 评论(0)  编辑 收藏 引用 所属分类: linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理