µ±Ç°Î»ÖãºLinux½Ì³Ì - Linux - ÔÚ UNIX ϵͳ·¢Õ¹Ó¦ÓóÌʽÈëÃÅ

ÔÚ UNIX ϵͳ·¢Õ¹Ó¦ÓóÌʽÈëÃÅ



         ÍõÖ¾Ïé

    ÐòÑÔ:
    ͬѧÃÇ¿ÉÄÜ»ò¶à»òÉÙÔÚÍø·ÉÏ×¥¹ýUNIX »ò X ÊÓ´°µÄÓ¦ÓóÌʽ,
    ÄãÊÇ·ñÔøÏë¹ýÕâЩ³ÌʽÊÇÈçºÎдµÄ?»òÕ߸ü½øÒ»²½,ÄãÊÇ·ñÒ²Ïë×Ô¼ºÐ´Ò»¸ö
    ´ó¼Ò¶¼ÓÐÐËȤȥÓõijÌʽ?²»µ«¿É³öÃûÓÖ¿ÉѵÁ·×Ô¼ºµÄ³ÌʽÉè¼ÆÄÜÁ¦.
    ÔÚ DOS Ö®ÏÂ,¿ÉÄܴ󲿷ֵÄÈËдӦÓóÌʽ¶¼Ã»ÎÊÌâ.¿ÉÊÇ»»µ½ UNIX
    Ö®áá¿ÉÄܾÍÒò²»ÊìϤ¶ø²»»áдÁË.±¾Îļ´ÊÇÒÔ±ÊÕßÉÏѧÆÚËùд֮ UNIX
    Ó¦ÓóÌʽ: FindMan ×÷Ϊ¡õÀý,ÆÚÊÕÅ×שÒýÓñ֮Ч.


    ¹Øì¶ FindMan:

    FindMan ÊÇÒ»¼¯ºÏ FindMan ¡¢ScanGirl ¡¢CScanGirl ÈýÏî Utility
    ΪһÌåµÄ³Ìʽ. µ±³õ·¢Õ¹ FindMan µÄ¶¯»úÊÇÓÉì¶ÉÏ»úÈËÊýÌ«¶à,ÍùÍùΪÁË
    ÕÒÒ»¸öÈ˶øÉËÑÛ¾¦µØÓÃÁ¦¿´ rusers µÄÊä³ö.ì¶ÊÇ¿ªÊ¼Ð´ FindMan . ¶øµ±Ê±Õý·ê
    HuntGirl(u8011093) ¡¢Hunt(u7917043) Ïà¼ÌÍƳö,ÓÉì¶ÕýºÏ½»´ó´ó¶àÊýÄÐÉú
    µÄÐèÇó,Òò´ËÔì³Éºä¶¯.±¾³ÌʽΪÁË˳Ӧ³±Á÷,¼ÓÈëÁË ScanGirl
    ¼° CScangirl ( ScanGirl ÖÐÎÄ°æ ). ÓÉ춴¦Àí³ÌÐòÀàËÆ, Òò´ËºÏ²¢³ÉÒ»¸ö³Ìʽ,
    ¶øÒÔ link(UNIX Command: ln) Á¬½á¸÷Ïî³Ìʽ,³ÌʽÔÙÒÔµÚÒ»¸ö×ÖĸÅжϸÃÖ´ÐкÎÏî³ÌÐò.
    FindMan ×Ô¿ª·ÅʹÓÃÒÔÀ´,Ŀǰÿ¸öÔ½Ա»Ê¹ÓÃÁË 6000 ´ÎÒÔÉÏ. ÆäÖÐÓÐÒ»¸ö
    ÓÐȤÏÖÏó, ×î³õÒ»¸öÔÂ, ScanGirl µÄʹÓÃÂÊÊÇ FindMan µÄÁ½±¶,ááÀ´ FindMan Öð
    ½¥×·ÉÏ ScanGirl, ÏÖÔÚ FindMan : ScanGirl µÄʹÓÃÂÊÊÇ 5:1 (FindMan 5xxx ´Î).
    ÕâÏÖÏóËƺõÏÔʾ½»´óÈËÒѲ»ÔÚÈçÒÔÇ°ÄÇÑùϲ»¶ºÍÅ®º¢×Ó talk ÁË.


    ÓйØÔÚ UNIX ÉÏдӦÓóÌʽµÄ¼¼ÇɺÍ×¢ÒâÊÂÏî:

    ÔÚ UNIX ÉÏдӦÓóÌʽÓëÔÚ DOS ÏÂд³Ìʽ²»Ò»ÑùµÄµØ·½Óм¸µã:
    1. UNIX µÄ Signal Ïàµ±ì¶ DOS µÄ Interrupt.
    2. UNIX ÓÐÐí¶àϵͳºô½Ð,¿ÉÒÔ×öµÍ½×µÄ¶¯×÷.
    3. UNIX ÊǶ๤µÄ×÷ҵϵͳ,ÎÒÃÇ¿ÉÉÆÓà UNIX µÄÕâÏîÄÜÁ¦.
    4. UNIX ÓгÌÐò¼äͨѶµÄÄÜÁ¦, Ëü¿É×ö¸÷¶à¹¤³ÌÐò¼ä¡¢ÉõÖÁ¸÷¹¤×÷Õ¾¼äµÄ¹µÍ¨.

    µ±È», UNIX µÄ¹¦Äܲ»Ö»Õâ 4 µã, ¶ÁÕßÒÔáá¿ÉÒÔááÂýÂýÌå»á.


    FindMan µÄ Initial ²¿·Ý:

    ÓÉì¶ FindMan Ö÷³Ìʽ̫³¤(¹² 10 Ò³),¶øÇÒÆäÖÐÓÐЩ²¿·ÝÈç²»Á˽â¾Í²»ÒªÊ¹ÓÃ,
    ·ñÔòϵͳ¿ÉÄÜ»á ...,¶øÄãµÄ account ¾Í¿ÉÄÜ»á ...,(µ±È»,´ËÒ»²¿·ÝÎÒ»áÌرð×¢Ã÷.)
    ËùÒÔ,ÎÒÖ»»á¸½ÉÏÖØÒª²¿·ÝµÄ³Ìʽ.
    ÒÔÏÂÎÒ»áÁгö³ÌʽƬ¶Î, Óë±È½ÏÆæÌصıäÊýÐû¸æ. ¶ÁÕßÃÇ×îºÃÓöµ½Ã»¿´
    ¹ýµÄÃüÁîʱ, ÔÚ UNIX ÀïÓà man ²é.

    struct passwd *p;
    uid_t uid;

    uid = getuid();
    if (!(p = getpwuid(uid))) {
    printf(\"Can\"t get user name !!\\n\");
    exit(1);
    }
    strcpy(uname,p->pw_name);
    gethostname(hsnm,sizeof(hsnm));
    if ( getlogin() == NULL ) {
    printf(\"This program is avai ....... is program..... \\n\");
    exit(1);
    }

    ÒÔÉϴ˲¿·ÝÊÇÈ¡µÃʹÓÃÕßµÄÕʺÅ(account) ÓëÖ´ÐÐ FindMan ʱµÄ¹¤×÷Õ¾Ãû³Æ.
    ²¢ÅжÏʹÓÃÕßÊÇ·ñÕæµÄÔÚÏßÉÏ(OnLine), ÒÔ getlogin() ÅжÏʹÓÃÕßÈô²»ÔÚÏßÉÏ,
    Ôò²»Èò»ÔÚÏßÉϵÄʹÓÃÕßÖ´ÐÐ. ´Ë·¨¿É·ÀֹʹÓÃÕßʹÓà rsh¡¢at¡¢cron µÈÃüÁî.
    ÔÙÀ´ÊÇÒÔÖ´ÐеµµÚÒ»¸öÓ¢ÎÄ×ÖÅжϸà show ÄÄÒ»ÖÖѶϢ¡¢¸ÃÖ´ÐÐÄÄÒ»ÖÖ³Ì
    ʽ(¼Ç¼ÔÚÒ»¸ö±äÊýÀï,ÒԴ˱äÊýÅжÏ). ´Ë²¿·Ý¼òµ¥,²»ÔÙ׸Êö.
    ½ÓÖøÊdzÌʽááµÄ²ÎÊýÅжÏ,³ÌʽÈçÏÂ:

    while ((n = getopt(argc,argv,\"af:h\")) != EOF)
    switch(n) {
    case \"a\":
    aflg++;
    break;
    case \"f\":
    fflg++;
    hostfl=optarg;
    break;
    case \"h\":
    if (aflg || fflg || lflg || Hflg)
    errflg++;
    else
    hflg++;
    break;
    default:
    errflg++;
    }
    if (errflg) {
    printf(\"\\nUsage: %s [-a] [-h] [-H] [-f FindHostName\"s FILE]\\n\",argv[0]);
    printf(\" -h : short help\\n\");
    printf(\" -H : detail help\\n\");
    exit(1);
    }
    if (hflg) {
    printf(\"\\nUsage: %s [-a] [-h] [-H] [-f FindHostName\"s FILE]\\n\",argv[0]);
    exit(0);
    }

    ³ÌʽÖÐµÄ getopt() Ö®ÖÐµÄ \"af:h\" ÊDzÎÊýµÄ×Ö. ÆäÖÐµÄ \":\" ±íʾ²ÎÊý
    Ö®áỹҪ¼ÓµÄ¶«¶«. ÀýÈç -f Ö®áỹҪ¼Ó FindHostName\"s FILE, ËùÒÔ f Ö®ááÒªÓÐ \":\".
    ¸½´øÒ»Ìá,ÕâÀïËù½éÉܵŦÄÜ,ËäÈ» FindMan Ò²»á Show ³ö,µ«´ó²¿·Ö½ÔΪ±£Áô¹¦ÄÜ,
    ²¢²»ÄÜʹÓÃ, ±ØÐëµÈÎÒÓпÕʵÔÚ¼ÓÉÏ.½ìʱÎÒ»á announce.
    Õⲿ·ÝËùÓõļ¼ÇÉ¿Éʹ³ÌʽÄÜÌṩʹÓÃÕ߶àÑùµÄÑ¡Ôñ.³ÌʽÖÐµÄ aflg¡¢fflg
    µÈ½ÔΪÆì±ê±äÊý. Ëü¿É¼Ç¼²ÎÊýµÄ×´¿ö.
    ÔÙÏÂÀ´ÊǸù¾Ý±äÊý¾ö¶¨³ÌʽҪ¶ÁÈ¡µÄ database(ÓÐ .look ¼°ÎÒµÄÖÐÓ¢ÎÄ
    girl database), ²¢¼Ç¼µ½ÎҵļǼµµÀï.´Ë²¿·Ý³ÌʽÒàÂÔÈ¥²»Ìá.
    ½ÓÏÂÀ´ÊÇ UNIX µÄ Signal Ö®ÔËÓúÍ×Ó³ÌÐòµÄ½¨Á¢. µ±³õÖ®ËùÒÔʹÓà fork
    ½¨Á¢Ðí¶à×Ó³ÌÐò²¢Ê¹Óø´ÔÓÇÒ³Ô Load µÄ³ÌÐò¼äͨѶ, ÊÇÒòΪÈç´Ë¿ÉÒÔ¼Ò¿ìËÙ¶È.
    ÓÉì¶ÓÐʱ»áÓÐһЩ¹¤×÷Õ¾µ±µô»òÎÞ·¨»ØÓ¦ rusers µÄ request,ÕâЩ¹¤×÷Õ¾¼´»á
    ÑÓ³Ù rusers ¡õ¼¯×ÊÁϵÄʱ¼ä. ÎҵijÌʽ¼´¿É²¿·Ý½â¾öÕâ¸öÎÊÌâ. ÓÉÖ÷³ÌÐò fork ³ö
    È¥µÄ¸÷×Ó³ÌÐò¸÷×Ô rusers Ò»¸ö¹¤×÷Õ¾,Ïȵõ½×ÊÁϵijÌÐòÏÈÏòÖ÷³ÌÐò´«ËÍ.
    (³ÌÐò¼ä´«ËÍÐèÓóÌÐò¼äͨѶµÄ¼¼ÇÉ) Èç´Ë¾Í¿É²»¹ÜÄÇЩ²»´«×ÊÁϵŤ×÷Õ¾ÁË.
    ËùÒÔÎÒµÄ FindMan ³£²»°´Ë³Ðò show ¸÷¹¤×÷Õ¾µÄ×ÊѶáá,Í£Á˺ܾòŽáÊø±ãÊÇ
    Õâ¸öµÀÀí. ÖªµÀÔ­Àíáá,Ï´ο´µ½Ñ¶Ï¢³öÍêÍ£ÏÂʱ,²»±Ø¿àµÈ¶ø¿ÉÒÔ Ctrl-C È¡
    ¶ø´úÖ®. ÏÖÔÚÓÉ춼ÆÖÐµÄ rusers ¸ÄÁ¼¹ý¶ø²»±ØÔÙ¿àµÈ.Òò´ËÀûÓô˼¼ÇÉÈ¡´ú
    ¸´ÔÓÇÒºÄ Load µÄ³ÌÐò¼äͨѶ±ã³ÉΪÎÒµÄÏÂÒ»¸ö¿ÎÌâ.
    ¡õ»°ÉÙ˵,¿´ÏÂÃæµÄ³Ìʽ:

    signal(SIGCLD, SIG_IGN);
    signal(SIGINT, timeout);

    for (i=0; i if ((pid = fork()) == 0) {
    pitch(hosts[i]);
    break;
    }
    }
    if (pid != 0)
    {
    tmpp[0]=(char)0;
    tmpp[1]=\"\\0\";
    catch(tmpp);
    if ((short)tmpp[0]) {
    printf(\"There are %d workstation responding fail...\\n\",tmpp[0]);
    printf(\" Fail workstation: %s\\n\",&tmpp[1]);
    }

    Ç°Á½¸ö Signal,µÚÒ»¸öµÄÒâÒåÊǺöÂÔ×Ó³ÌÐò½áÊøµÄѶºÅ.¶øµÚ¶þ¸öµÄÒâÒåÊÇ
    Óöµ½ Ctrl-C Ö®ÀàµÄÖжÏʱҪִÐÐ timeout() º¯Êý.¶øµ×ÏÂÔòÊÇÓà fork() ²úÉú
    ×Ó³ÌÐò,ÓÐ¹Ø fork() µÄÒâÒåÓëÓ÷¨,Çë×ÔÐвο¼×ÊÁÏ. ³ÌʽÖÐµÄ catch() ÊÇÎÒ¶¨Òå
    µÄº¯Êý,Ï´ÎÔÙ˵.¶ø tmpp[0] ÔòÊÇÓÃÀ´ÅжϹ¤×÷Õ¾ÊÇ·ñÓÐ respond.



    ½áÓï:

    ÓÉì¶Æª·ù¼°Ê±¼äÒòËØ,±¾ÎÄÔڴ˸æÒ»¶ÎÂä ,ÏÂÆÚÔÙ¼ÌÐø.ÈôÓÐÈκν¨Òé,»¶Ó­ÓÃ
    E-Mail ¼Äµ½ [email protected] .


    ÔÚ UNIX ϵͳ·¢Õ¹Ó¦ÓóÌʽÈëÃÅ (¶þ) ÍõÖ¾Ïé




    È¡µÃ User ×ÊÁ쵀 pitch º¯Êý:
    ÉÏÆäµÄ FindMan µÄ Initial ²¿·ÝÌáµ½Á½¸ö User Define µÄº¯Êý,
    Ò»¸öÊÇ catch, ÁíÒ»¸ö¼´ÊÇ pitch. Initial ²¿·Ý fork µÄ¶þÊ®¸ö³ÌÐò¶¼ºô½Ð
    pitch º¯ÊýÏò¶þʮ̨¹¤×÷Õ¾ÊÕ¼¯ User login µÄ×ÊÁϲ¢É¸Ñ¡³öʹÓÃÕßËùÐèµÄ
    ×ÊÁÏ, ÏÈÕûÀí³öÀ´µÄ³ÌÐò±ãÏÈÏòÖ÷³ÌÐòÒªÇó´«ËÍ×ÊÁÏ, ´«ËÍÒÔ Socket Íê³É.
    ÓÐ¹Ø Socket µÄ²¿·ÝÒÔááÔÙ̸. ÒÔÏÂÊÇ pitch º¯ÊýµÄ²¿·Ý³Ìʽ:

    pitch(host)
    char *host;
    {
    int bufsize;
    int ps, j, k, l;
    char buffer[BUFSIZE];
    int count;
    struct utmpidlearr up;
    int tmp, gcount, gidx[25];
    char gname[25][80];
    char line[25][9];
    char name[25][9];
    char hhost[25][17];
    long time[25];
    unsigned idle[25];
    char temp[80];

    up.uia_arr=(struct utmpidle **) malloc(25*sizeof(struct utmpidle *));

    : : :
    : : :
    /* ´Ë´¦Ê¡ÂÔÒªÇó Connect µÄ Socket Ö® Initial ²¿·Ý. */
    : : :
    : : :


    strcpy(buffer,host);
    k=strlen(host);
    strcpy(&buffer[k],\":\\n\");
    k+=2;
    if ( rusers(host, &up) == 0 ) {
    count = up.uia_cnt;
    buffer[k++] = (char) count;
    for ( j=0; j strncpy(line[j],up.uia_arr[j]->ui_utmp.ut_line,8);
    line[j][8]=\"\\0\";
    strncpy(name[j],up.uia_arr[j]->ui_utmp.ut_name,8);
    name[j][8]=\"\\0\";
    strncpy(hhost[j],up.uia_arr[j]->ui_utmp.ut_host,16);
    hhost[j][16]=\"\\0\";
    time[j]=up.uia_arr[j]->ui_utmp.ut_time;
    idle[j]=up.uia_arr[j]->ui_idle;
    }
    if (count != 0) {
    gcount=check(count,name,gname,gidx);
    buffer[k++] = (char) gcount;
    if (gcount !=0)
    for (j=0; j strcpy(&buffer[k],gname[j]);
    k+=strlen(gname[j]);
    do {
    tmp=gidx[j++];
    if ( j > gcount )
    break;

    buffer[k++]=\"\\t\";
    strcpy(&buffer[k],line[tmp]);
    k+=strlen(line[tmp]);

    buffer[k++]=\"\\t\";
    if ((l=idle[tmp]/60) != 0)
    sprintf(temp,\"%d:%d\\t\",l,(idle[tmp]%60));
    else
    sprintf(temp,\"%d\\t\",(idle[tmp]%60));
    strcpy(&buffer[k],temp);
    k+=strlen(temp);


    strcpy(temp,asctime(localtime(&time[tmp])));
    strcpy(&buffer[k],temp);
    k+=(strlen(temp) - 6);

    buffer[k++]=\"\\t\";
    strcpy(&buffer[k],hhost[tmp]);
    k+=strlen(hhost[tmp]);

    buffer[k++]=\"\\n\";
    } while (strcmp(name[tmp],\"repeat\") == 0);
    }
    }
    buffer[k++]=\"\\0\";
    }
    else {
    count = -1;
    buffer[k++] = (char) count;
    }

    : : :
    : : :
    /* ´Ë´¦Ê¡ÂÔÒªÇó Connect µÄ Socket Ö®´«ËÍ×ÊÁϲ¿·Ý. */
    : : :
    : : :

    }

    ÆäÖÐ rusers µÄ²¿·Ý¿ÉÔÚ CCSUN Óà \" man 3 rusers \" ²é, ×Èժ¼
    ÈçÏÂ:

    ==================> man 3 rusers µÄժ¼ <==============
    NAME
    rnusers, rusers - return information about users on remote
    machines

    DESCRIPTION
    rnusers() returns the number of users logged on to host (-1
    if it cannot determine that number). rusers() fills the
    utmpidlearr structure with data about host, and returns 0 if
    successful.

    PROGRAMMING
    #include <=== ²é struct µÄµØ·½
    rnusers(host)
    char *host
    rusers(host, up)
    char *host
    struct utmpidlearr *up;
    ==========================================================

    ÓÉì¶ÒÔÉ쵀 manual Öв¢Ã»ÓÐÖ¸³ö utmpidlearr µÄ½á¹¹ÐÍ̬ÈçºÎ,
    Òò´ËÎÒÃDZØÐëÁгöÎÒÃÇËùÐèÒªµÄ head file ×ÊÁÏÒÔÈ¡µÃÎÒÃÇÒªµÄ
    utmpidlearr ½á¹¹. ÒÔÏÂÊÇÎÒµÄËÑÑ°ËùµÃ:

    ==================> utmpidlearr ÖØÒª×ÊÁÏ <=================
    struct utmpidle {
    struct utmp ui_utmp;
    unsigned ui_idle;
    };

    struct utmpidlearr {
    struct utmpidle **uia_arr;
    int uia_cnt;
    };

    struct utmp {
    char ut_line[8]; /* tty name */
    char ut_name[8]; /* user id */
    char ut_host[16]; /* host name, if remote */
    long ut_time; /* time on */
    };
    ============================================================

    ÓÐÁËÕâЩ×ÊÁÏÒÔáá, ÔÙ¿´Ç°ÃæµÄ³Ìʽ¾Í±È½ÏÒ׶®ÁË. ( ÈôÒò³ÌʽµÄ
    ±äÊýÃüÃûÌ«²î, »òÁ÷³ÌÌ«»ìÂÒ, Çë¼ûÁÂ. ÒòÕâÒ»²¿·ÝÔÚÍê³ÉÖ®³õÓÖ²»¶Ï¼ÓÐÂ
    µÄ¹¦ÄÜ, ¶ø²»ÊÇÒ»´ÎÍê³ÉµÄ. )

    ³ÌʽÖÐµÄ buffer Õâ¸ö±äÊý´¢´æÓûËͳöµÄ×ÊÁÏ, Æä¸ñʽΪ:
    ==================================================================
    ¹¤×÷Õ¾Ãû login ÈËÊý ·ûºÏ×ÊÁϵÄÈËÊý Õʺż°ÆäÉÏ»ú״̬
    any bytes 1 bytes 1 bytes any bytes
    ==================================================================

    ÒÔÏÂÃæ FindMan µÄÊä³öΪÀý˵Ã÷:
    =====================> FindMan ²¿·ÝÊä³ö <=====================
    ccsun7:
    u813xx07 -----> xxxxxxxxxxx
    ttyq0 0 Tue Apr 27 23:56:53 xxxuling.Dorm10.
    ttyp1 0 Wed Apr 28 01:46:29 xxxuling.Dorm10.

    u802xx23 Chen2 xxxxxxxx
    ttyr6 31:47 Mon Apr 26 18:47:17 140.113.1xx.177:

    ccsun16:
    u813xx16 -----> xxxxxxxxxxx
    ttyp1 0 Wed Apr 28 01:46:29 xxxmy.DormChu.NC
    ==============================================================

    ÆäÖй¤×÷Õ¾Ãû²»ÏÞ byte Êý, ½ÓÊÕ¶ËÒÔ \":\\n\" Åжϴ˲¿·ÝµÄ×ÊÁÏ
    ½áÊøÓë·ñ. µ±µÚ¶þ²¿·ÝΪ 0 ʱ¼´ÌîÈë -1 ±íʾÎÞÈË, Óë×ÊÁϱȶÔááÕÒ²»µ½
    ÈËÒàÈç´Ë. check º¯Êý¼´ÊÇ´¦ÀíÓë×ÊÁϱȶԵŤ×÷, FindMan ÊÇÓë .look
    ±È¶Ô, ScanGirl Óë girl µÄ×ÊÁϵµ±È¶Ô. check µÄº¯Êý´«»Ø gcount¡¢
    gname¡¢gidx Èý¸ö±äÊý. gcount ¼´ÊÇ match µÄÈËÊý, gname ÊÇ´Ó rusers
    ´«»ØµÄ×ÊÁϵµÉÔ×÷ÐÞ¸Ä ( Öظ´µÄÕÊºÅ¸Ä³É \"repeat\" ) ¶ø³É. ¶ø gidx ÊÇ
    rusers ´«»Ø×ÊÁϵÄÅÅÐòááµÄ index.
    ´Ó check º¯Êý´«»ØµÄ gname¡¢gidx ¹¹³É buffer ÕóÁÐ×îááµÄ×ÊÁÏ.
    ¼´ \"Õʺż°ÆäÉÏ»ú״̬\" ²¿·Ý. È«²¿Íê³Éáá¼´½«×ÊÁÏËͳö. ÓÉì¶ check º¯Êý
    ²¢²»ÄÑд, ¹Ê²»Áгö.

    ÓÉì¶Æª·ù¼°Ê±¼äËùÏÞ, Õâ´ÎÖ»½² pitch º¯Êý, ÆäËüÒÔááÔÙ¼ÌÐø,
    ÏÂÆÚ¼û!! 8-)

    ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª
    FindMan ¹Ø±ÕÆôʾ:
    ½üÀ´ CCSUN µÄʹÓÃÂÊ´ó·ùÔö¼Ó , ʹµÃ CCSUN
    µÄ Load ¸ß¾Ó²»ÏÂ, ÎÒµÄ FindMan ¹«ÓóÌʽֻÓÐÔÚ Load ºÜÇáµÄ
    SUN ÉϲâÊÔ¹ý ( 0 µ½ 2 ), ûÏëµ½×î½ü Load ÖØµÄ SUN ( 7 ÒÔÉÏ )
    ÉÏÖ´ÐÐʱ, ÎÒ³ÌʽÖмӿìËÑÑ°ËٶȵIJ¿·Ý¾¹³ÉΪÖÂÃüÉË. ÓÉì¶Ò»
    ´Î¿ª¶þÊ®¸ö³ÌÐò, Èô²»ÐÒÒòµçÄÔÒì³£, Ôò´ó²¿·Ö³ÌÐò»áͣס¶øÎÞ·¨À뿪,
    ʹµçÄÔ Load ¸üÐμÓÖØ, Ò²Áîϵͳ¹ÜÀíÕßÀ§ÈÅ. ÔÚÎÒ»¨ÁËÊ®ÊýСʱ²»¶Ï
    ¸Ä³Ìʽáá( °üÀ¨¼ÓÉÏ Alarm Signal ¿ØÖÆÖ´ÐÐʱ¼ä ), ÖÕ춻¹ÊDz»ÄÜ¿Ë·þ
    Load ÖØʱµÄÒì³£×´¿ö. ¿´À´, ÎҵijÌʽÀíÄî ( ÒÔ¶à¸ö³ÌÐòƽÐд¦ÀíÀ´Ôö
    ¿ìËÙ¶È ) Ö»ÄÜÔÚÈËÊýÉٵŤ×÷Õ¾»òÌØÊâµÄµçÄÔ²ÅÄÜÓÃ. ÓÐ־춷¢Õ¹Ó¦ÓóÌ
    ʽµÄͬѧ, ÇмÇÕâ¸ö½Ìѵ.

    ÓÉì¶¾ÉµÄ FindMan ³ÌʽÓÐʱ»á³ö×´¿ö, ÎÒÒѾ­½«ËüÈ¥µô,
    ÒÔááÓпÕʱÔÙдеĵ¥Ò»³ÌÐòÖ® FindMan. ËäÈ»³ÌʽÒѳ·µô, µ«±¾ÎĿɵ±
    ³É´¿ÎªÌÖÂÛ³ÌʽÉè¼Æ, ¹ÊÈÔ¼ÌÐøÏÂÈ¥.
    ·¢²¼ÈË:netbull À´×Ô:ǶÈëʽLinux