ºìÁªLinuxÃÅ»§
Linux°ïÖú

¿ª·¢Linux²Ù×÷ϵͳºǫ́·þÎñ½ø³ÌÏê½â

·¢²¼Ê±¼ä:2006-11-14 10:25:55À´Ô´:ºìÁª×÷Õß:download
¡¡¡¡ÊØ»¤½ø³Ì£¨Daemon£©ÊÇÔËÐÐÔÚºǫ́µÄÒ»ÖÖÌØÊâ½ø³Ì¡£Ëü¶ÀÁ¢ÓÚ¿ØÖÆÖն˲¢ÇÒÖÜÆÚÐÔµØÖ´ÐÐijÖÖÈÎÎñ»òµÈ´ý´¦ÀíijЩ·¢ÉúµÄʼþ¡£ÊØ»¤½ø³ÌÊÇÒ»ÖÖºÜÓÐÓõĽø³Ì¡£ LinuxµÄ´ó¶àÊý·þÎñÆ÷¾ÍÊÇÓÃÊØ»¤½ø³ÌʵÏֵġ£±ÈÈ磬Internet·þÎñÆ÷inetd£¬Web·þÎñÆ÷httpdµÈ¡£Í¬Ê±£¬ÊØ»¤½ø³ÌÍê³ÉÐí¶àϵͳÈÎÎñ¡£±ÈÈ磬×÷Òµ¹æ»®½ø³Ìcrond£¬´òÓ¡½ø³ÌlpdµÈ¡£

¡¡¡¡ÊØ»¤½ø³ÌµÄ±à³Ì±¾Éí²¢²»¸´ÔÓ£¬¸´ÔÓµÄÊǸ÷ÖÖ°æ±¾µÄUnixµÄʵÏÖ»úÖƲ»¾¡Ïàͬ£¬Ôì³É²»Í¬ Unix»·¾³ÏÂÊØ»¤½ø³ÌµÄ±à³Ì¹æÔò²¢²»Ò»Ö¡£ÐèҪעÒ⣬ÕÕ°áijЩÊéÉϵĹæÔò£¨ÌرðÊÇBSD4.3ºÍµÍ°æ±¾µÄSystem V£©µ½Linux»á³öÏÖ´íÎóµÄ¡£ÏÂÃ潫¸ø³öLinuxÏÂÊØ»¤½ø³ÌµÄ±à³ÌÒªµãºÍÏêϸʵÀý¡£

¡¡¡¡Ò»£® ÊØ»¤½ø³Ì¼°ÆäÌØÐÔ

¡¡¡¡ÊØ»¤½ø³Ì×îÖØÒªµÄÌØÐÔÊǺǫ́ÔËÐС£ÔÚÕâÒ»µãÉÏDOSϵij£×¤ÄÚ´æ³ÌÐòTSRÓëÖ®ÏàËÆ¡£Æä´Î£¬ÊØ»¤½ø³Ì±ØÐëÓëÆäÔËÐÐÇ°µÄ»·¾³¸ôÀ뿪À´¡£ÕâЩ»·¾³°üÀ¨Î´¹Ø±ÕµÄÎļþÃèÊö·û£¬¿ØÖÆÖնˣ¬»á»°ºÍ½ø³Ì×飬¹¤×÷Ŀ¼ÒÔ¼°Îļþ´´½¨ÑÚÄ£µÈ¡£ÕâЩ»·¾³Í¨³£ÊÇÊØ»¤½ø³Ì´ÓÖ´ÐÐËüµÄ¸¸½ø³Ì£¨ÌرðÊÇshell£©Öм̳ÐÏÂÀ´µÄ¡£×îºó£¬ÊØ»¤½ø³ÌµÄÆô¶¯·½Ê½ÓÐÆäÌØÊâÖ®´¦¡£Ëü¿ÉÒÔÔÚLinuxϵͳÆô¶¯Ê±´ÓÆô¶¯½Å±¾/etc/rc.dÖÐÆô¶¯£¬¿ÉÒÔÓÉ×÷Òµ¹æ»®½ø³ÌcrondÆô¶¯£¬»¹¿ÉÒÔÓÉÓû§Öնˣ¨Í¨³£ÊÇ shell£©Ö´ÐС£

¡¡¡¡×ÜÖ®£¬³ý¿ªÕâЩÌØÊâÐÔÒÔÍ⣬ÊØ»¤½ø³ÌÓëÆÕͨ½ø³Ì»ù±¾ÉÏûÓÐʲôÇø±ð¡£Òò´Ë£¬±àдÊØ»¤½ø³Ìʵ¼ÊÉÏÊÇ°ÑÒ»¸öÆÕͨ½ø³Ì°´ÕÕÉÏÊöµÄÊØ»¤½ø³ÌµÄÌØÐÔ¸ÄÔì³ÉΪÊØ»¤½ø³Ì¡£Èç¹û¶Ô½ø³ÌÓбȽÏÉîÈëµÄÈÏʶ¾Í¸üÈÝÒ×Àí½âºÍ±à³ÌÁË¡£

¡¡¡¡¶þ£® ÊØ»¤½ø³ÌµÄ±à³ÌÒªµã

¡¡¡¡Ç°Ãæ½²¹ý£¬²»Í¬Unix»·¾³ÏÂÊØ»¤½ø³ÌµÄ±à³Ì¹æÔò²¢²»Ò»Ö¡£ËùÐÒµÄÊÇÊØ»¤½ø³ÌµÄ±à³ÌÔ­ÔòÆäʵ¶¼Ò»Ñù£¬Çø±ðÔÚÓÚ¾ßÌåµÄʵÏÖϸ½Ú²»Í¬¡£Õâ¸öÔ­Ôò¾ÍÊÇÒªÂú×ãÊØ»¤½ø³ÌµÄÌØÐÔ¡£Í¬Ê±£¬LinuxÊÇ»ùÓÚSyetem VµÄSVR4²¢×ñÑ­Posix±ê×¼£¬ÊµÏÖÆðÀ´ÓëBSD4Ïà±È¸ü·½±ã¡£±à³ÌÒªµãÈçÏ£»

¡¡¡¡1. ÔÚºǫ́ÔËÐС£

¡¡¡¡Îª±ÜÃâ¹ÒÆð¿ØÖÆÖն˽«Daemon·ÅÈëºǫִ́ÐС£·½·¨ÊÇÔÚ½ø³ÌÖе÷ÓÃforkʹ¸¸½ø³ÌÖÕÖ¹£¬ÈÃDaemonÔÚ×Ó½ø³ÌÖкǫִ́ÐС£

ÒýÓÃ:
if(pid=fork())
exit(0); //ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì£¬×Ó½ø³Ì¼ÌÐø


¡¡¡¡2. ÍÑÀë¿ØÖÆÖնˣ¬µÇ¼»á»°ºÍ½ø³Ì×é

¡¡¡¡ÓбØÒªÏȽéÉÜÒ»ÏÂLinuxÖеĽø³ÌÓë¿ØÖÆÖնˣ¬µÇ¼»á»°ºÍ½ø³Ì×éÖ®¼äµÄ¹Øϵ£º½ø³ÌÊôÓÚÒ»¸ö½ø³Ì×飬½ø³Ì×éºÅ£¨GID£©¾ÍÊǽø³Ì×鳤µÄ½ø³ÌºÅ£¨PID£©¡£µÇ¼»á»°¿ÉÒÔ°üº¬¶à¸ö½ø³Ì×é¡£ÕâЩ½ø³Ì×é¹²ÏíÒ»¸ö¿ØÖÆÖնˡ£Õâ¸ö¿ØÖÆÖÕ¶Ëͨ³£ÊÇ´´½¨½ø³ÌµÄµÇ¼Öնˡ£¿ØÖÆÖնˣ¬µÇ¼»á»°ºÍ½ø³Ì×éͨ³£ÊÇ´Ó¸¸½ø³Ì¼Ì³ÐÏÂÀ´µÄ¡£ÎÒÃǵÄÄ¿µÄ¾ÍÊÇÒª°ÚÍÑËüÃÇ£¬Ê¹Ö®²»ÊÜËüÃǵÄÓ°Ïì¡£·½·¨ÊÇÔÚµÚ1µãµÄ»ù´¡ÉÏ£¬µ÷ÓÃsetsid()ʹ½ø³Ì³ÉΪ»á»°×鳤£º

ÒýÓÃ:
setsid();
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 2 ÌõÆÀÂÛ

  1. download ÓÚ 2006-11-14 10:27:40·¢±í:

    ¡¡¡¡6. ÖØÉèÎļþ´´½¨ÑÚÄ£

    ¡¡¡¡½ø³Ì´Ó´´½¨ËüµÄ¸¸½ø³ÌÄÇÀï¼Ì³ÐÁËÎļþ´´½¨ÑÚÄ£¡£Ëü¿ÉÄÜÐÞ¸ÄÊØ»¤½ø³ÌËù´´½¨µÄÎļþµÄ´æȡλ¡£Îª·ÀÖ¹ÕâÒ»µã£¬½«Îļþ´´½¨ÑÚÄ£Çå³ý£ºumask(0);

    ¡¡¡¡7. ´¦ÀíSIGCHLDÐźÅ

    ¡¡¡¡´¦ÀíSIGCHLDÐźŲ¢²»ÊDZØÐëµÄ¡£µ«¶ÔÓÚijЩ½ø³Ì£¬ÌرðÊÇ·þÎñÆ÷½ø³ÌÍùÍùÔÚÇëÇóµ½À´Ê±Éú³É×Ó½ø³Ì´¦ÀíÇëÇó¡£Èç¹û¸¸½ø³Ì²»µÈ´ý×Ó½ø³Ì½áÊø£¬×Ó½ø³Ì½«³ÉΪ½©Ê¬½ø³Ì£¨zombie£©´Ó¶øÕ¼ÓÃϵͳ×ÊÔ´¡£Èç¹û¸¸½ø³ÌµÈ´ý×Ó½ø³Ì½áÊø£¬½«Ôö¼Ó¸¸½ø³ÌµÄ¸ºµ££¬Ó°Ïì·þÎñÆ÷½ø³ÌµÄ²¢·¢ÐÔÄÜ¡£ÔÚLinuxÏ¿ÉÒÔ¼òµ¥µØ½« SIGCHLDÐźŵIJÙ×÷ÉèΪSIG_IGN¡£

    ÒýÓÃ:
    signal(SIGCHLD,SIG_IGN);


    ¡¡¡¡ÕâÑù£¬ÄÚºËÔÚ×Ó½ø³Ì½áÊøʱ²»»á²úÉú½©Ê¬½ø³Ì¡£ÕâÒ»µãÓëBSD4²»Í¬£¬BSD4ϱØÐëÏÔʽµÈ´ý×Ó½ø³Ì½áÊø²ÅÄÜÊͷŽ©Ê¬½ø³Ì¡£

    ¡¡¡¡Èý£® ÊØ»¤½ø³ÌʵÀý

    ¡¡¡¡ÊØ»¤½ø³ÌʵÀý°üÀ¨Á½²¿·Ö£ºÖ÷³ÌÐòtest.cºÍ³õʼ»¯³ÌÐòinit.c¡£Ö÷³ÌÐòÿ¸ôÒ»·ÖÖÓÏò/tmpĿ¼ÖеÄÈÕÖ¾test.log±¨¸æÔËÐÐ״̬¡£³õʼ»¯³ÌÐòÖеÄinit_daemonº¯Êý¸ºÔðÉú³ÉÊØ»¤½ø³Ì¡£¶ÁÕß¿ÉÒÔÀûÓÃinit_daemonº¯ÊýÉú³É×Ô¼ºµÄÊØ»¤½ø³Ì¡£

    ÒýÓÃ:
    #include
    #include
    #include
    #include
    #include

    void init_daemon(void)
    {
    int pid;
    int i;
    if(pid=fork())
    exit(0);//ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì
    else if(pid


    ¡¡¡¡1£® init.cÇåµ¥

    ÒýÓÃ:
    #include
    #include

    void init_daemon(void);//ÊØ»¤½ø³Ì³õʼ»¯º¯Êý

    main()
    {
    FILE *fp;
    time_t t;
    init_daemon();//³õʼ»¯ÎªDaemon

    while(1)//ÿ¸ôÒ»·ÖÖÓÏòtest.log±¨¸æÔËÐÐ״̬
    {
    sleep(60);//˯ÃßÒ»·ÖÖÓ
    if((fp=fopen("test.log","a")) >=0)
    {
    t=time(0);
    fprintf(fp,"Im here at %sn",asctime(localtime(&t)) );
    fclose(fp);
    }
    }
    }


    ¡¡¡¡2£® test.cÇåµ¥

    ¡¡¡¡ÒÔÉϳÌÐòÔÚRedHat Linux6.0ϱàÒëͨ¹ý¡£²½ÖèÈçÏ£º

    ¡¡¡¡±àÒ룺gcc -g -o test init.c test.c
    ¡¡¡¡Ö´ÐУº./test
    ¡¡¡¡²é¿´½ø³Ì£ºps -ef
    ¡¡¡¡´ÓÊä³ö¿ÉÒÔ·¢ÏÖtestÊØ»¤½ø³ÌµÄ¸÷ÖÖÌØÐÔÂú×ãÉÏÃæµÄÒªÇó¡£

  2. download ÓÚ 2006-11-14 10:26:36·¢±í:

    ¡¡¡¡ËµÃ÷£ºµ±½ø³ÌÊǻỰ×鳤ʱsetsid()µ÷ÓÃʧ°Ü¡£µ«µÚÒ»µãÒѾ­±£Ö¤½ø³Ì²»ÊǻỰ×鳤¡£setsid()µ÷Óóɹ¦ºó£¬½ø³Ì³ÉΪеĻỰ×鳤ºÍеĽø³Ì×鳤£¬²¢ÓëÔ­À´µÄµÇ¼»á»°ºÍ½ø³Ì×éÍÑÀë¡£ÓÉÓڻỰ¹ý³Ì¶Ô¿ØÖÆÖն˵ĶÀÕ¼ÐÔ£¬½ø³ÌͬʱÓë¿ØÖÆÖÕ¶ËÍÑÀë¡£

    ¡¡¡¡3. ½ûÖ¹½ø³ÌÖØдò¿ª¿ØÖÆÖÕ¶Ë

    ¡¡¡¡ÏÖÔÚ£¬½ø³ÌÒѾ­³ÉΪÎÞÖն˵ĻỰ×鳤¡£µ«Ëü¿ÉÒÔÖØÐÂÉêÇë´ò¿ªÒ»¸ö¿ØÖÆÖնˡ£¿ÉÒÔͨ¹ýʹ½ø³Ì²»ÔÙ³ÉΪ»á»°×鳤À´½ûÖ¹½ø³ÌÖØдò¿ª¿ØÖÆÖնˣº

    ÒýÓÃ:
    if(pid=fork()) exit(0); //½áÊøµÚÒ»×Ó½ø³Ì£¬µÚ¶þ×Ó½ø³Ì¼ÌÐø£¨µÚ¶þ×Ó½ø³Ì²»ÔÙÊǻỰ×鳤£©


    ¡¡¡¡4. ¹Ø±Õ´ò¿ªµÄÎļþÃèÊö·û

    ¡¡¡¡½ø³Ì´Ó´´½¨ËüµÄ¸¸½ø³ÌÄÇÀï¼Ì³ÐÁË´ò¿ªµÄÎļþÃèÊö·û¡£Èç²»¹Ø±Õ£¬½«»áÀË·Ñϵͳ×ÊÔ´£¬Ôì³É½ø³ÌËùÔÚµÄÎļþϵͳÎÞ·¨Ð¶ÏÂÒÔ¼°ÒýÆðÎÞ·¨Ô¤ÁϵĴíÎó¡£°´ÈçÏ·½·¨¹Ø±ÕËüÃÇ£º

    ÒýÓÃ:
    for(i=0;i ¹Ø±Õ´ò¿ªµÄÎļþÃèÊö·ûclose(i);>


    ¡¡¡¡5. ¸Ä±äµ±Ç°¹¤×÷Ŀ¼

    ¡¡¡¡½ø³Ì»î¶¯Ê±£¬Æ乤×÷Ŀ¼ËùÔÚµÄÎļþϵͳ²»ÄÜжÏ¡£Ò»°ãÐèÒª½«¹¤×÷Ŀ¼¸Ä±äµ½¸ùĿ¼¡£¶ÔÓÚÐèҪת´¢ºËÐÄ£¬Ð´ÔËÐÐÈÕÖ¾µÄ½ø³Ì½«¹¤×÷Ŀ¼¸Ä±äµ½Ìض¨Ä¿Â¼Èç /tmpchdir("/")