ÔÚ 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