QNX下根据进程名查找PID

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>
#define BUF_SIZE 1024

 

bool GetPidFromName()
{
 DIR *dir;
 struct dirent *ptr;
 FILE *fp;
 char filepath[50];//大小随意,能装下cmdline文件的路径即可
 char cur_task_name[50];//大小随意,能装下要识别的命令行文本即可
 char buf[BUF_SIZE];
 dir = opendir("/proc"); //打开路径
 if (NULL != dir)
 {
  while ((ptr = readdir(dir)) != NULL) //循环读取路径下的每一个文件/文件夹
  {
   //如果读取到的是"."或者".."则跳过
   if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0))           
    continue;
   //如果读取到的不是文件夹名字则跳过
   //qnx660下d_type没有定义
   /*if (DT_DIR != ptr->d_type)
    continue;*/
   //如果读取到的文件夹名称不是由数字组成,则跳过
   //例如 boot , self
   memset(buf,0,BUF_SIZE*sizeof(char));
   if (sscanf(ptr->d_name,"%[^0-9]",buf))
    continue;
   
   sprintf(filepath, "/proc/%s/exefile", ptr->d_name);//该进程对应的exefile路径
   fp = fopen(filepath, "r");//打开文件
   if (NULL != fp)
   {
    memset(buf,0,BUF_SIZE*sizeof(char));
    if( fgets(buf, BUF_SIZE-1, fp)== NULL )// 读取exefile
    {
     fclose(fp);
     continue;
    }
    // exefile内容为:/usr/sbin/qconn
    // 最后部分为进程名称
    char ch = '/';
    char *pch = NULL;
    pch = strrchr(buf,ch);
    if (pch)
    {
     strcpy(cur_task_name,pch+1);
    }
    else //ptr == NULL
    {
     strcpy(cur_task_name,buf);
    }

    //如果文件内容满足要求则打印路径的名字(即进程的PID)
    if (!strcmp(OsRES_Name,cur_task_name))
    {
     //找到对应进程的PID
     //sscanf(ptr->d_name,"%[0-9]",buf)
     OsRES_Pid = atol(ptr->d_name);
     return true;
    }
    fclose(fp);
   }
  }
  closedir(dir);//关闭路径
 }
 return false;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QNX的screen进程是一个图形框架,提供开发时图像显示功能,抽象对外统一接口,屏蔽底层硬件差异。它是基于client/server模型的,其中screen进程是server程序。通过libscreen/libEGL/libGLESv2提供的API函数,应用程序可以进行渲染和硬件加速。此外,screen还支持插件,可以加载特定的硬件模块,如显示硬件模块、2D/3D加速器(GPU)和输入设备等资源。\[3\]在QNX系统中,screen服务的启动命令一般是通过命令"screen -c /lib64/graphics.conf"来启动,通常由startupmanager带起。\[1\]同时,screen服务的初始化依赖于openwfd显示框架,所以要求启动顺序要在wfd服务之后。\[2\] #### 引用[.reference_title] - *1* *2* [QNX SCREEN架构基本介绍](https://blog.csdn.net/kill150/article/details/131190079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [QNX screen使用介绍 第一章](https://blog.csdn.net/Suixing_yuan/article/details/115145756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值