当前位置:  技术问答>linux和unix

求一个函数linux c/c++ ,检测程序是否运行着,bool CheckRuning(const string name);

    来源: 互联网  发布时间:2016-11-19

    本文导语:  本帖最后由 ruikflyer2004 于 2011-04-01 12:13:35 编辑 输入程序名,输出该程序是否运行着 bool CheckRuning(const string name); c的也可以,希望哪位能给个完全无错的代码。谢谢了。 实在不行给个思路或参考吧。 | ...

本帖最后由 ruikflyer2004 于 2011-04-01 12:13:35 编辑
输入程序名,输出该程序是否运行着
bool CheckRuning(const string name);

c的也可以,希望哪位能给个完全无错的代码。谢谢了。

实在不行给个思路或参考吧。

|

/************************************
 函数描述:通过系统 ps 命令获取进程号
 约束    :进程名称长度上限100字节
 ************************************/
bool CheckRuning(char *proc)
{
    FILE *pp;

    pid_t pid, me;
    char  cmd[128], buf[128], comm[128];

    if( proc == NULL || *proc == 0 ) return(false);

    sprintf(cmd, "ps -eo comm,pid|grep ^%.100s", proc);

    if( (pp = popen(cmd, "r")) != NULL )
    {
        me = getpid();

        while( ! feof(pp) )
        {
            pid = 0;

            if( fgets(buf, sizeof(buf), pp) == NULL ) break;
            sscanf(buf, "%100s%d", comm, &pid);

            if( (strcmp(comm, proc) == 0) && (pid != me) )
            {
                pclose(pp);
                return(true);
            }
        }
        pclose(pp);
    }

    return(false);
}

|
int check_runing(char* prog)
{
    char cmd[128] = "ps -elf | grep "";
    int len = strlen(prog);
    FILE* fp;
    int val;
    char* other = "" | wc -l > tmp"; 
    if(len > 128 - sizeof(cmd) - strlen(other))
    {
        printf("program name too longn");
        _exit(0);
    }
    strncat(cmd, prog, len);
    strncat(cmd, other, strlen(other));
    system(cmd);
    fp = fopen("./tmp", "r");
    fscanf(fp, "%d", &val);
    fclose(fp);
    unlink("./tmp");
    if(val > 2)
        return val;
    else
        return 0;
}
其实不是太合适,这样创建了一个临时文件,如果当前目录下也有就麻烦了,可以用tmpname()创建一个临时文件,那样有点麻烦不过更严谨

|
给你个思路

你到proc目录下枚举所有的数字目录
然后取出目录中status文件的第一行,也就是程序的名称
root@xld1:/proc/1# cat status
Name:   init
State:  S (sleeping)
Tgid:   1
例如这个进程1的名称就是init

循环一次就知道你的进程还在不在了

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • 如果知道一个函数的地址或函数名,如何得到函数所在的文件名?
  • C++ MultiMaps 成员 key_comp():返回比较key的函数
  • java的数学函数在那个类中,如幂函数、指数、对数、双曲线函数等?
  • C++ MultiMaps 成员 value_comp():返回比较元素value的函数
  • 一个父类的构造函数的参数是(Applet applet),请问它的子类构造函数当中应怎样调用父类构造函数?
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • js的众多函数令小弟实在搞不清楚!哪有函数速查手册之类的软件或者书籍!谢了!比如,setInterval、clearInterval这两个函数是干什么的?
  • cityhash 32位,64位和128位介绍及函数列表
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3