<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 5, comments - 14, trackbacks - 0, articles - 11

    linux進(jìn)程監(jiān)控

    Posted on 2007-02-12 16:30 東舟 閱讀(1329) 評(píng)論(4)  編輯  收藏 所屬分類: Linux

    ?


    #include?
    < sys / wait.h >
    #include?
    < sys / types.h >
    #include?
    < unistd.h >
    #include?
    < errno.h >
    #include?
    < stdarg.h >
    #include?
    < stdio.h >
    #include?
    < string.h >

    int ?startprocess( char * ?path[], char * ?name[], int ?pid[ 3 ]);
    int ?watchprocess( int ?ppid);
    int ?rebootpocess( char * ?path[], char * ?name[], int ?ppid, int ?num);
    int ?main( int ?argc,? char ? * argv[],? char ? * envp[]) {
    ?
    ??
    ??
    char * ?path[ 3 ];
    ???path[
    0 ]? = ? " /home/tony/testmysql/source/mysqlDB/test " ;
    ???path[
    1 ]? = ? " /home/tony/testmysql/source/mysqlDB/test1 " ;
    ???path[
    2 ]? = ? " /home/tony/testmysql/source/mysqlDB/test2 " ;
    ???
    char * ?name[ 3 ];
    ???name[
    0 ] = " test " ;
    ???name[
    1 ] = " test1 " ;
    ???name[
    2 ] = " test2 " ;
    ?
    ???
    int ?pid[ 3 ]; int ?ppid;
    ???
    ???
    ???startprocess(path,name,pid);
    ???
    // printf("%d\n",pid[0]);
    ???
    ???
    for (;;) {
    ????
    int ?j;
    ????
    for (j = 0 ;j < 3 ;j ++ ) {
    ?????
    if (watchprocess(pid[j]) < 0 )
    ????????rebootpocess(path,name,pid[j],j);
    ????}

    ????sleep(
    30 );
    ???}

    ???
    ??
    // if(watchprocess(3025)<0)
    ??????
    // ?rebootpocess(path,name,5317,2);
    ?? return ? 0 ;
    }

    int ?startprocess( char * ?path[], char * ?name[], int ?pid[ 3 ]) {
    ?
    ?
    int ?i = 0 ;
    ?
    for (i = 0 ;i < 3 ;i ++ ) {
    ???
    int ?fd;
    ???fd
    = fork();
    ???
    if (fd < 0 )
    ??????
    {
    ???????
    return ? - 1 ;?
    ??????}

    ??????
    if (fd == 0 )
    ?????????
    {
    ??????????execl(path[i],name[i],(
    char ? * ?) 0 );
    ??????????exit(
    0 );
    ?????????}

    ??????
    else
    ???????
    {??
    ????????????pid[i]
    = fd;
    ??????????
    continue ;
    ???????}

    ??}
    ?
    ??
    ??
    ??
    return ? 0 ;
    }

    int ?watchprocess( int ?ppid) {
    ?
    ??printf(
    " ======watchprocess========\n " );
    ??printf(
    " %d\n " ,ppid);
    ?
    ??
    char * ?filename = ( char ? * )malloc( 100 );
    ??sprintf(filename,
    " /proc/%d/status " ,ppid);
    ??FILE?
    * ?pFile;
    ??
    char ? * ?line? = ?NULL;
    ???size_t?len?
    = ? 0 ;
    ???ssize_t?read;
    ???pFile?
    = ?fopen?(filename, " r " );
    ???
    if ?(pFile == NULL)? {
    ????printf(
    " %s\n " ,? " Config?file?is?not?exist!\n " );
    ????
    return ? - 1 ;
    ???}

    ???
    int ?linenum = 0 ;
    ???
    char ? * ?tmp;
    ???
    // char*?tmp1?=?(char*)malloc(20);
    ??? while ?((read? = ?getline( & line,? & len,?pFile))? != ? - 1 ? && ?linenum? < ? 3 )? {
    ???????linenum
    ++ ;?????
    ???????strtok(line,?
    " \t " );
    ???????tmp?
    = ?strtok(NULL, " ? " );
    ???????
    if (?linenum? == ? 2 ? && ?((strcmp(tmp, " S " ) == 0 )? || (strcmp(tmp, " R " ) == 0 ))?) {
    ??????????
    // printf("sdfsdlfw2rwW$#@^$%&YERGHFDGDFGERYG\n");
    ??????????fclose(pFile);
    ??????????pFile?
    = ?NULL;
    ??????????
    return ? 0 ;
    ????????}
    ?????
    ???}

    ???free(filename);
    ???fclose(pFile);
    ???pFile?
    = ?NULL;?
    ??
    return ? - 1 ;
    ?}

    int ?rebootpocess( char * ?path[], char * ?name[], int ?ppid, int ?num) {
    ?
    ?printf(
    " ======rebootpocess========\n " );
    ?printf(
    " %d\n " ,num);
    ?
    if (kill(ppid,SIGKILL) == 0 )
    ????
    {???
    ????
    int ?fd;???
    ?????????fd
    = fork();
    ???????
    if (fd == 0 )
    ???????????
    {?????
    ????????????execl(path[num],name[num],NULL);
    ????????????exit(
    0 );
    ??????????????}

    ???????
    else
    ?????????
    {
    ??????
    return ? 0 ;
    ??????}

    ?????}

    ???
    else
    ?????
    {
    ??????printf(
    " Kill?the?process?failed! " );
    ?????
    return ? - 1 ;?
    ????}

    ?
    ?
    return ? 0 ;
    ?}

    Feedback

    # re: linux進(jìn)程監(jiān)控[未登錄](méi)  回復(fù)  更多評(píng)論   

    2007-12-09 15:15 by zhan
    我很想知道你這個(gè)進(jìn)程監(jiān)控程序大概的思路,尤其是他是怎么樣對(duì)我想監(jiān)控的進(jìn)程進(jìn)行監(jiān)控的,是怎樣判斷的是不是那個(gè)進(jìn)程。謝謝!!
    我的郵箱:zhanshicai8139@163.com

    # 可以告訴我你的思路嗎?  回復(fù)  更多評(píng)論   

    2008-03-05 13:49 by jiangminjie
    我的郵箱是:jiangminjie2008@hotmail.com

    # re: linux進(jìn)程監(jiān)控[未登錄](méi)  回復(fù)  更多評(píng)論   

    2012-08-07 21:05 by jiang
    我的郵箱:jlyh225@163.com
    我也想知道你的思路

    # re: linux進(jìn)程監(jiān)控  回復(fù)  更多評(píng)論   

    2012-10-12 17:24 by avrtercel
    你好,最近在學(xué)習(xí)進(jìn)程監(jiān)控這一塊,想請(qǐng)教博主的這段程序的進(jìn)程監(jiān)控的原理,我的郵箱avrtercel@163.com,辛苦了!謝謝!

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲欧美日韩中文无线码| 中文字幕在线观看亚洲日韩| 国产免费丝袜调教视频| 国产成人综合亚洲| 亚洲天堂男人天堂| 国产成人免费手机在线观看视频| 在线观看免费中文视频| caoporm超免费公开视频| 亚洲色大情网站www| 亚洲高清不卡视频| 久久久精品国产亚洲成人满18免费网站 | 成全视频免费高清| 久久久久久久岛国免费播放| 美女露隐私全部免费直播| 日本亚洲精品色婷婷在线影院| 国产亚洲一区二区三区在线观看| 国产免费牲交视频| 一个人在线观看视频免费| 国产午夜无码精品免费看动漫| 日韩成人毛片高清视频免费看| 亚洲熟妇AV乱码在线观看| 亚洲av成本人无码网站| 亚洲 欧洲 视频 伦小说| 亚洲精品动漫免费二区| 亚洲av乱码一区二区三区香蕉| 99亚洲精品高清一二区| 亚洲AV无码专区电影在线观看| 精品国产亚洲男女在线线电影 | 中文字幕不卡亚洲 | 国产精品免费播放| 爱情岛论坛网亚洲品质自拍| 国产男女猛烈无遮挡免费视频网站| 国产一级特黄高清免费大片| 亚洲最大激情中文字幕| 久久精品国产亚洲AV高清热| 最新亚洲卡一卡二卡三新区| 一级毛片成人免费看a| 特黄特色的大片观看免费视频| 高潮毛片无遮挡高清免费视频| 中文字幕不卡高清免费| 一区二区三区视频免费观看|