LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1446|回复: 6

请问unix c 中检验进程是否存在怎么写

[复制链接]
发表于 2004-2-24 00:24:27 | 显示全部楼层 |阅读模式
多谢
发表于 2004-2-24 10:01:42 | 显示全部楼层
让进程在执行时生成一个标志文件
然后查询这个文件是否存在

这样可以不?
发表于 2004-2-24 11:10:19 | 显示全部楼层
如果是你自己的程序
你可以在进程启动时锁定一个/tmp下的临时文件
检查时再锁定一下,如果成功就表明进程不存在

如果不是自己写的,那么写个脚本,在里面启动进程,并把进程号记入/var/run/xxx.pid文件中,检查时就读取/var/run/xxx.pid里的进程号pid,比如说是123,然后执行ps 123,看看这个进程是不是你要查的那个
发表于 2004-2-24 12:53:50 | 显示全部楼层
你可以写一个文件到/tmp/目录,然后unlink,这样,只要进程存在(其它的程序没有打开它),这个文件就存在。
 楼主| 发表于 2004-2-24 22:56:22 | 显示全部楼层
谢谢大家的帮助!!偶想到一个办法,要是能取的该进程的内存映象就表示进程存在,要是不能就表示没有这个进程,怎么做呢?
发表于 2004-2-25 00:12:03 | 显示全部楼层
试试下面的函数:
int IsOther(char *szProgName) {
  FILE *fp;
  char szCmd[80],szBuf[80],szName[80],szPid[11],szTime[6],szTty[11];
  int iIsOther = 0;

  while(fgets(szBuf,120,fp) != NULL) {
    sscanf(szBuf,"%s%s%s%s",szPid,szTty,szTime,szName);
    szPid[10] = '\0';
    szTime[5] = '\0';
    szTty[10] = '\0';
    szName[strlen(szProgName)] = '\0';

    if(memcmp(szName, szProgName, strlen(szProgName)) == 0)
      iIsOther++;
  }

  pclose(fp);
  return (iIsOther - 1);
}
  memset(szBuf, 0x00, sizeof(szBuf));
  memset(szCmd, 0x00, sizeof(szCmd));
  sprintf(szCmd, "ps -e| grep %s", szProgName);
  fp = popen(szCmd,"r");
  if(fp == NULL) {
    printf("Coule not run ps program\n");
    pclose(fp);
    return -1;
  }
发表于 2004-2-25 00:13:37 | 显示全部楼层
贴错了,应该是:
int IsOther(char *szProgName) {
  FILE *fp;
  char szCmd[80],szBuf[80],szName[80],szPid[11],szTime[6],szTty[11];
  int iIsOther = 0;

  memset(szBuf, 0x00, sizeof(szBuf));
  memset(szCmd, 0x00, sizeof(szCmd));
  sprintf(szCmd, "ps -e| grep %s", szProgName);
  fp = popen(szCmd,"r");
  if(fp == NULL) {
    printf("Coule not run ps program\n");
    pclose(fp);
    return -1;
  }

  while(fgets(szBuf,120,fp) != NULL) {
    sscanf(szBuf,"%s%s%s%s",szPid,szTty,szTime,szName);
    szPid[10] = '\0';
    szTime[5] = '\0';
    szTty[10] = '\0';
    szName[strlen(szProgName)] = '\0';

    if(memcmp(szName, szProgName, strlen(szProgName)) == 0)
      iIsOther++;
  }

  pclose(fp);
  return (iIsOther - 1);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表