ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Shell Lab] Trace02, Trace03, Trace04
    시스템 프로그래밍 2022. 11. 15. 21:58

    Trace02 는 Foreground job의 형태로 실행파일을 실행시키는 문제입니다.

    쉘에서 새로운 프로그램을 실행시키기 위한 방법은
    1. fork()를 통해서 자식 프로세스를 생성하고
    2. 자식 프로세스에서 execve 을 통해 새로운 프로그램을 실행시키는 것입니다.

    execve는 제어흐름을 변경하여 새로운 프로그램을 실행시키고 다시 원래 프로그램으로 돌아오지 않았다는 것을 복기하며 trace02를 진행해봅시다!

    Trace03, Trace04 는 각각 프로그램을 foreground job으로 argument 없이 실행, foreground job으로 argument를 갖고 실행하는 문제입니다. Trace02를 해결하면 execve 호출을 통해 같이 해결됩니다.

    최종코드

    void eval(char *cmdline) {
    	char *argv[MAXARGS];
        pid_t pid;
        
        parseline(cmdline, argv);
        
        if (!builtin_cmd(argv)) {
          if ( (pid = fork() ) == 0 ) {
          //fork로 자식 프로세스 생성 후 자식 프로세스에서 execve 실행
              if ( execve(argv[0], argv, environ) < 0 ) {
                  printf("%s : Command not found\n\n", argv);
                  exit(0); // command not found이면 자식 프로세스 종료
              }
          }
          usleep(10000);
        }
        return 0;
    }

    '시스템 프로그래밍' 카테고리의 다른 글

    [Shell Lab] Trace07  (0) 2022.11.15
    [Shell Lab] Trace05, Trace 06  (0) 2022.11.15
    [Shell Lab] Trace01  (0) 2022.11.15
    [Shell Lab] Trace00  (0) 2022.11.15
    [System Programming] Basic Skill for Shell Lab  (0) 2022.11.15
Designed by Tistory.