有时需要在Android的C层中创建一个新的进程比如myServer,但是我们又不希望,同一时间有多个myServer存在。

本文介绍个方法,相当于在在后台执行"ps myServer",获取结果,进行分析,在主线程中调用。

查询一个名为myServer的进程是否存在可以这么使用:

getMyPid();

查询失败返回-1,没有这个进程返回0,如果进程存在就返回该进程的pid。


以下是代码实现。

intpidIndex(constchar*szData){charbuf[256];strcpy(buf,szData);kesyPrintf("%s\n",buf);intidx=-1;constchar*split="";char*p=strtok(buf,split);while(p!=NULL){++idx;kesyPrintf("[%d]%s\n",idx,p);if(strcmp(p,"PID")==0){returnidx;}p=strtok(NULL,split);}return-1;}staticconstchar*getSubStr(constchar*szData,intidx,char*szRet){if(idx<0){returnszRet;}charbuf[1024];strncpy(buf,szData,sizeof(buf));buf[sizeof(buf)-1]='0';constchar*split="";char*p=strtok(buf,split);intn=0;while(p!=NULL){if(idx==n){returnstrcpy(szRet,p);}//kesyPrintf("[%d]%s\n",n,p);p=strtok(NULL,split);++n;}returnszRet;}//返回myServer的进程id//查询失败返回-1//没有这个进程返回0staticpid_tgetMyPid(){FILE*stream;/*Openingaread-onlychanneltolscommand.*/chartmpCmd[256];sprintf(tmpCmd,"ps%s","myServer");stream=popen(tmpCmd,"r");if(NULL==stream){kesyPrintf("Unabletoexecutethecommand.");return-1;}else{charbuffer[1024];intstatus;intline=0;intpidIdx=-1;/*Readeachlinefromcommandoutput.*/while(NULL!=fgets(buffer,1024,stream)){//分析结果kesyPrintf("read:%s\n",buffer);if(0==line){pidIdx=pidIndex(buffer);}else{charszPid[64];charszRet[64];strcpy(szPid,getSubStr(buffer,pidIdx,szRet));gMyPid=atoi(szPid);}line++;}/*Closethechannelandgetthestatus.*/status=pclose(stream);kesyPrintf("psexitedwithstatus%d\n",status);returngMyPid;}}

欢迎评论。

------------------ byjacksonke


更多相关文章

  1. 如何在后台运行Linux命令?
  2. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  3. Android(安卓)启动过程框架
  4. 慎用原生MediaPlayer类播放音频
  5. Android应用开发以及设计思想深度剖析(4)
  6. Android5.1.1源码 - zygote fork出的子进程如何权限降级
  7. Android下的Service的基本用法
  8. 游走Android系列之Service
  9. Android(安卓)开发中踩过的坑之八:多进程问题

随机推荐

  1. DelphiXE获取 Android(安卓)上的设备 ID
  2. RubyMotion瀹e竷灏嗘敮鎸丄ndroid
  3. Android(安卓)Studio移除的Module如何恢
  4. Qt Quick实现的疯狂算数游戏
  5. Android(安卓)SDK开发指南(翻译)系列一:最
  6. Android(安卓)USB串口通信实现 以及绕过U
  7. android ANR寮傚父鍙婂叾瑙e喅鏂瑰紡
  8. android内置闹铃功能的简单介绍
  9. [置顶] Android(安卓)4.0 中由ProGuard引
  10. android 自定义view之选座功能