[sysp] ShellLab trace07

정민경·2022년 12월 5일
0

ShellLab

목록 보기
1/1
post-thumbnail
  • trace 07 : 두 개의 background 작업을 실행한 후, built-in 명령어 ‘jobs’를 실행하면 현재 실행되고 있는 작업의 리스트를 출력해주는 문제

trace07은 다음과 같은 흐름으로 작동한다.

trace 01 문제였던 ‘quit’ 명령어와 같은 built-in 명령어이기 때문에 builtin_cmd() 함수안에서 기능을 수행해주면 된다.

shell을 실행한 후 command를 입력받는다. (이번 trace에서는 built-in 명령어인 ‘jobs’를 입력받기 때문에 builtin 명령어가 입력된다고 생각한다.) 그 후 입력받은 command가 builtin command인지 확인하고 ‘jobs’는 builtin command이므로 eval() 함수의 if문 안에 있는 fork() 등의 모든 기능을 수행하지 않고, builtin_cmd()만이 수행되게 된다.

builtin_cmd() 에서는 ‘quit’와 같이 입력받은 command가 ‘jobs’와 같다면 작업의 리스트를 출력해주는 listjobs() 함수를 실행하고 1을 return해줘서 eval() 함수로 돌아갔을 때 조건문에 들어가지 않고 종료시킨 뒤 command 입력을 다시 기다리도록 하였다.

작업의 list를 출력해주는 listjobs() 함수는 (jobs, output file descriptor) 이렇게 두 개의 인자를 받는다. jobs는 작업들을 넣어주고, output file descriptor는 출력 파일에 접근할 때 사용하는 값이다. 이 값이 “STDOUT_FILENO” 로 정의되어있는데 listjobs의 인자로 “STDOUT_FILINO”를 넣어주어 표준출력파일에 접근하도록 하였다.
이렇게 builtin_cmd() 함수에 “jobs” command의 기능을 구현해 trace 07을 해결했다.

0개의 댓글