컴퓨터/언어,프로그래밍

Linux system() 와 fork(), execl() 사용

스노우볼^^ 2009. 5. 27. 06:24

// a.c

#include <stdio.h>

int main()
{
    printf("a : YoonByoungHoon\n");
    return 0;
}

// b.c

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

int main()
{
    int status = 0;

    // system() 이용 - 쉘을 이용하기때문에 쉘환경에 종속적이어서 비효율적이다.
    pid_t parent, child;
    system("./a");
    printf("system()\n");

 

    // fork() and execl() - 쉘환경에 상관없이 자식 프로세스를 생성하여 실행할 수 있다.
    parent = fork();
    switch(parent)
    {
        case -1:
            perror("fork failed.");
            break;
        case 0:
            execl("./a", "a", "", 0);  // fork() 를 통해 자식프로세스를 생성하면 execl 로 새로운 일을 수행할 수 있다.
            break;
        default:
            break;
    }

    // 자식 프로세스가 일을 끝낼때까지 기다려 준다.
    child = wait(&status);


    printf("fork() and execl()\n");

    printf("Parent Process completed.\n");

 

    return 0;
}