linux man page : exit - ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=exit">exit</a>(3)

1장. exit(3)

ÇÁ·Î±×·¥À» Á¤»ó Á¾·á ½ÃŲ´Ù.


1.1. »ç¿ë¹ý

#include <stdlib.h>

void exit(int status);
		


1.2. ¼³¸í

exit()ÇÔ¼ö´Â ÇÁ·Î±×·¥À» Á¤»óÁ¾·á ½Ã۸ç, À̶§ Á¾·á °ªÀ¸·Î status¸¦ ºÎ¸ðÇÁ·Î¼¼½º¿¡ status & 0377 ·Î³Ñ°ÜÁØ´Ù. ºÎ¸ð ÇÁ·Î¼¼½º´Â wait(2)¸¦ ÀÌ¿ëÇØ¼­ ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ Á¾·á°ªÀ» ÀÐ¾î ¿Ã ¼ö ÀÖ´Ù. exit()°¡ È£ÃâµÇ¸é atexit()¿Í on_exit()¿¡ ÀÇÇØ¼­ µî·ÏµÈ ÇÔ¼öµéÀÌ ¸ÕÀú ½ÇÇàµÈ´Ù. ±× ÈÄ ¸ðµç ¿­¸° ½ºÆ®¸²À» ºñ¿ì°í(flush) ´Ý´Â´Ù. tmpfile()¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÀÓ½ÃÆÄÀϵµ À̶§ »èÁ¦µÈ´Ù.

Ç¥ÁØ C¿¡¼­´Â exit()ÀÇ Á¾·á°ªÀ» À§Çؼ­ EXIT_SUCCESS¿Í EXIT_FAILURE¸¦ ÁغñÇØµÎ°í ÀÖ´Ù.


1.3. ¹Ýȯ°ª

¾Æ¹«°Íµµ ¸®ÅÏÇÏÁö ¾Ê´Â´Ù.


1.4. ÁÖ¸ñ


exit°¡ ÁøÇàµÇ´Â µ¿¾È atexit()¿Í on_exit()¿¡ ÀÇÇØ¼­ µî·ÏµÈ ÇÔ¼öµéÀÌ ÀÖ´Ù¸é À̵éÀ» ¸ðµÎ ½ÇÇàÇÑ´Ù. µî·ÏµÈ ÇÔ¼öµéÀº (½ºÅÃÇüÅ·Î) °¡Àå ¸¶Áö¸·¿¡ µî·ÏµÈ ÇÔ¼ö¸¦ °¡Á®¿Í¼­ ½ÇÇàµÈ´Ù. ¸¸¾à exit °úÁ¤Áß¿¡ longjmp()µîÀÌ È£ÃâµÈ´Ù¸é ¾î¶°ÇÑ ÀÏÀÌ ÀϾÁö ¿¹ÃøÇÒ ¼ö ¾ø´Ù.

EXIT_SUCCESS ¿Í EXIT_FAILURE ´Â Á¾·á°ªÀ» °£´ÜÇÏ°í ¸íÈ®ÇÏ°Ô °áÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. EXIT_SUCCESS´Â ÇÁ·Î±×·¥ÀÌ ÁÖ¾îÁø ÀÏÀ» Á¤»óÀûÀ¸·Î ¼öÇàÇßÀ½À» EXIT_FAILURE´Â Á¤»óÀûÀ¸·Î ¼öÇàÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇÑ´Ù. ¹°·Ð ÇÁ·Î±×·¥¿¡ µû¶ó¼­ ´Ù¾çÇÑ Á¾·á°ªÀ» ¸®ÅÏÇÒ ¼öµµ ÀÖÀ¸¸ç, À̰ÍÀº ÇÁ·Î±×·¥°³¹ßÀÚÀÇ Á¤Ã¥¿¡ ÀÇÁ¸ÀûÀÌ µÈ´Ù. º¸Åë 0À» Á¤»ó ¼öÇà, ±×·¸Áö ¾ÊÀº °æ¿ì¸¦ ºñÁ¤»ó ¼öÇà(¿¡·¯)·Î Á¤ÀÇÇÑ´Ù.

exit()°¡ ¼öÇàµÇ¸é¼­ ¹ß»ýÇÑ »óŰªÀº ¹Ýµå½Ã ºÎ¸ð¿¡°Ô Àü´ÞµÇ¾îÁ®¾ß ÇÑ´Ù. ¿©±â¿¡´Â µÎ °¡Áö °æ¿ì°¡ Àִµ¥, ºÎ¸ð°¡ SA_NOCLDWAIT »óÅÂÀ̰ųª, SIGCHLD ½Ã±×³Î¿¡ ´ëÇØ¼­ ½Ã±×³Î Çڵ鷯¸¦ SIG_IGNÀ¸·Î ÁöÁ¤Çß´Ù¸é Á¾·á°ªÀ» ¹ö¸®°Ô µÈ´Ù. ¸¸¾à ºÎ¸ð°¡ wait()ÇÔ¼öµîÀ» ÀÌ¿ëÇØ¼­ ÀÚ½ÄÀÇ Á¾·á¸¦ ±â´Ù¸®°Ô µÇ¸é ºÎ¸ð´Â ÀÚ½ÄÀÇ Á¾·á°ªÀ» ¾òÀ» ¼ö ÀÖ°Ô µÈ´Ù. ¾î´À ÂÊÀ» ¼±ÅÃÇϵçÁö °£¿¡ ÀÚ½Ä ÇÁ·Î¼¼½º´Â Áï°¢ Á¾·áÇϴµ¥, ¸¸¾à ºÎ¸ð°¡ SA_NOCLDWAITÀ̰ųª SIGCHLD¿¡ ´ëÇØ SIG_IGNÇÏÁö ¾ÊÀº »óÅ¿¡¼­ Áï ÀÚ½ÄÀÇ Á¾·á¸¦ ±â´Ù¸®°Ú´Ù°í ¸í½ÃÇÑ »óÅ¿¡¼­ wait()¸¦ ÇÏÁö ¾Ê¾ÒÀ» °æ¿ì ÀÚ½Ä ÇÁ·Î¼¼½º´Â Á»ºñ(zombie)ÇÁ·Î¼¼½º »óŰ¡ µÈ´Ù. Á»ºñ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Á»ºñ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ °íÂûÀ» Âü°íÇϱ⠹ٶõ´Ù.

¸¸¾à SIGCHLD ½Ã±×³ÎÀ» Áö¿øÇϵµ·Ï signal()¼³Á¤À» Çß´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áÇßÀ» ¶§ SIGCHLD ½Ã±×³ÎÀÌ ºÎ¸ð¿¡°Ô º¸³»¾îÁø´Ù. ¸¸¾à SA_NOCLDWAIT·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é SIGCHLD ½Ã±×³ÎÀÌ Àü´ÞµÇ¾úÀ» ¶§ ¾î¶² ÀÏÀÌ ÀÏ¾î ³¯Áö ¿¹Ãø ÇÒ¼ö ¾ø´Ù.

¸¸¾à Á¾·áµÇ´Â ÇÁ·Î¼¼½º°¡ ¼¼¼Ç ¸®´õÀÌ°í ¼¼¼Ç°ú ÀÚ½ÅÀÇ Å͹̳ÎÀ» Á¦¾îÇϰí ÀÖ´Ù¸é, ÀÌ Å͹̳ÎÀ» »ç¿ëÇÏ´Â foreground ÇÁ·Î¼¼½º¿¡°Ô´Â SIGHUP½Ã±×³ÎÀÌ Àü´ÞµÇ°í ¼¼¼Ç°ú Å͹̳ÎÀÇ ¿¬°áÀÌ ÇØÁ¦µÈ´Ù.


1.5. ¿¹Á¦

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


int main()
{
    int pid;
    int status;
    int spid;
    pid = fork();

    if (pid == 0)
    {
        sleep(5);
        printf("I will be back %d\n", getpid());
        return 1;
    }

    else if(pid > 0)
    {
        printf("Im parent %d\n", getpid());
        printf("Press any key and wait\n");
        getchar();
        // ÀÚ½ÄÇÁ·Î¼¼½º¸¦ wait ÇÑ´Ù.
        // ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ Á¾·á»óÅ´ status ¸¦ ÅëÇØ ¹Þ¾Æ¿Â´Ù.
        spid = wait(&status);
        printf("ÀÚ½ÄÇÁ·Î¼¼½º wait ¼º°ø \n");
        // ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ PID, ¸®Åϰª, Á¾·á»óÅÂ(Á¤»óÁ¾·áȤÀº ºñÁ¤»óÁ¾·á)¸¦
        // ¾ò¾î¿Â´Ù.
        printf("PID         : %d\n", spid);
        printf("Exit Value  : %d\n", WEXITSTATUS(status));
        printf("Exit Stat   : %d\n", WIFEXITED(status));
    }
    else
    {
        perror("fork error :");
    }
}
		

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.