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 |