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

Linux²Ù×÷ϵͳÏÂÊØ»¤½ø³ÌµÄ±à³Ì·½·¨

·¢²¼Ê±¼ä:2006-11-07 10:15:19À´Ô´:ºìÁª×÷Õß:lgms2008
¡¡¡¡ÊØ»¤½ø³Ì£¨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);//ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì£¬×Ó½ø³Ì¼ÌÐø
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 3 ÌõÆÀÂÛ

  1. myxsg ÓÚ 2006-11-07 14:04:35·¢±í:

    ÎÒûѧ¹ý±à³Ì,ÊÇÔÚÊÇ¿´²»¶®

  2. lgms2008 ÓÚ 2006-11-07 10:16:34·¢±í:

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

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

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

    #include < unistd.h >
    #include < signal.h >
    #include < sys/param.h >
    #include < sys/types.h >
    #include < sys/stat.h >
    void init_daemon(void)
    {
    int pid;
    int i;
    if(pid=fork())
    exit(0);//ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì
    else if(pid< 0)
    exit(1);//forkʧ°Ü£¬Í˳ö
    //ÊǵÚÒ»×Ó½ø³Ì£¬ºǫ́¼ÌÐøÖ´ÐÐ
    setsid();//µÚÒ»×Ó½ø³Ì³ÉΪеĻỰ×鳤ºÍ½ø³Ì×鳤
    //²¢Óë¿ØÖÆÖն˷ÖÀë
    if(pid=fork())
    exit(0);//ÊǵÚÒ»×Ó½ø³Ì£¬½áÊøµÚÒ»×Ó½ø³Ì
    else if(pid< 0)
    exit(1);//forkʧ°Ü£¬Í˳ö
    //Êǵڶþ×Ó½ø³Ì£¬¼ÌÐø
    //µÚ¶þ×Ó½ø³Ì²»ÔÙÊǻỰ×鳤

    for(i=0;i< NOFILE;++i)//¹Ø±Õ´ò¿ªµÄÎļþÃèÊö·û
    close(i);
    chdir("/tmp");//¸Ä±ä¹¤×÷Ŀ¼µ½/tmp
    umask(0);//ÖØÉèÎļþ´´½¨ÑÚÄ£
    return;
    }

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

    #include < stdio.h >
    #include < time.h >

    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);
    }
    }
    }

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

    ¡¡¡¡±àÒ룺gcc -g -o test init.c test.c

    ¡¡¡¡Ö´ÐУº./test

    ¡¡¡¡²é¿´½ø³Ì£ºps -ef

    ¡¡¡¡´ÓÊä³ö¿ÉÒÔ·¢ÏÖtestÊØ»¤½ø³ÌµÄ¸÷ÖÖÌØÐÔÂú×ãÉÏÃæµÄÒªÇó¡£

  3. lgms2008 ÓÚ 2006-11-07 10:16:00·¢±í:

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

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

    ¡¡¡¡¿ØÖÆÖնˣ¬µÇ¼»á»°ºÍ½ø³Ì×éͨ³£ÊÇ´Ó¸¸½ø³Ì¼Ì³ÐÏÂÀ´µÄ¡£ÎÒÃǵÄÄ¿µÄ¾ÍÊÇÒª°ÚÍÑËüÃÇ£¬Ê¹Ö®²»ÊÜËüÃǵÄÓ°Ïì¡£·½·¨ÊÇÔÚµÚ1µãµÄ»ù´¡ÉÏ£¬µ÷ÓÃsetsid()ʹ½ø³Ì³ÉΪ»á»°×鳤£º

    setsid();

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

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

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

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

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

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

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

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

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

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

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

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

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

    signal(SIGCHLD,SIG_IGN);

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