关闭

利用信号监视进程存在

标签: bufferstringfile
348人阅读 评论(0) 收藏 举报

下面这个例程可以用于监视某个进程是否存在。

 

#include <iostream>

#include <signal.h>

using namespace std;

 

int get_pid(string & managerName)

{

        string strCmd = "pidof "+managerName;

        FILE *pp;

        char buffer[10];

        pp = popen(strCmd.c_str(), "r");

        memset(buffer, 0x00, 10);

        fgets(buffer, 10, pp);

        pclose(pp);

        return atoi(buffer);

}

 

int main(int argc, char **argv) {

        int i;

        union sigval value;

        string mName="NotificationManager";

        int pid = get_pid(mName); //获取进程id

 

        value.sival_int = 0;

 

        while(1)

        {

                i = sigqueue(pid, 0, value); //return 0 表示成功,也即具有pid的进程存在;请注意:权限问题,如果当前进程无权限向目标进程发送信号也会失败

                if(i){

                        cout<<"the progress is not exist"<<endl;

                        pid=get_pid(mName); //尝试重现根据程序名获取pid

                }

                else

                        cout<<"the progress is OK"<<endl;

        }

        return 0;

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:500439次
    • 积分:5340
    • 等级:
    • 排名:第5039名
    • 原创:42篇
    • 转载:201篇
    • 译文:1篇
    • 评论:37条
    文章分类
    最新评论