- C언어로 나만의 Bash Shell 구현
- 2022.04 ~ 2022.05
- C, Makefile, Linux
- execve:
ls
등의 프로그램을 실행시키는 역할 - fork:
execve
를 호출하여ls
등의 프로그램을 실행시킬 자식 프로세스를 생성하는 역할 - waitpid: 자식 프로세스가
ls
등의 프로그램을 실행시키고 종료 될 때까지, 부모 프로세스를 대기 시키는 역할 - signal:
ctrl + c
같은 시그널이 발생할 때, 기존에 수행하던 행동 대신 내가 정의한 행동을 하게 하는 역할 - pipe: 두 개의 파일 디스크립터를 연결 함으로써, 한 프로세스의 출력을 다른 프로세스의 입력으로 넘길수 있도록 이어주는 역할
- dup2: 표준 입력 또는 표준 출력의 파일 디스크립터 값을 복사하는 역할
ls
입력main
함수의 인자 값으로 들어오는 환경 변수들의 복잡한 파싱 과정을 거쳐,ls
실행 파일의 경로 조회fork
함수를 호출하여 자식 프로세스 생성- 자식 프로세스는
execve
함수를 호출하여ls
실행 파일을 실행한 뒤 종료됨 - 부모 프로세스는
waitpid
함수를 호출하여 자식 프로세스가 종료 될때까지 기다림 - 터미널에
ls
결과가 출력 됨
signal
함수를 호출하여ctrl+c
가 하는 기존의 행동 대신, 내가 정의한 행동을 하게 만듬- 기존의 행동 : 나만의 Bash Shell을 종료 시킴
- 내가 정의한 행동 : 터미널에 "bash$" 라는 문자열을 출력 시킴
ctrl+c
입력- 나만의 Bash Shell을 종료 시키는 행동 대신, 터미널에 "bash$" 라는 문자열을 출력 시킴
ls | grep e
입력fork
함수를 호출하여 자식 프로세스 생성- 자식 프로세스
pipe
함수를 호출하여, 두 파일 디스크립터 a와 b가 서로 이어지게 만듬fork
함수를 호출하여 자식 프로세스 생성
- 자식 프로세스의 자식 프로세스
dup2
함수를 호출하여 파일 디스크립터 a에 STDOUT의 파일 디스크립터를 복사execve
함수를 호출하여ls
실행 파일을 실행한 뒤 종료됨ls
실행 파일의 결과가 STDOUT 대신 파일 디스크립터 a로 출력됨
- 자식 프로세스
waitpid
함수를 호출하여 자식 프로세스의 자식 프로세스가 종료 될때까지 기다림dup2
함수를 호출하여 파일 디스크립터 b에 STDIN의 파일 디스크립터를 복사- 파일 디스크립터 b는 a와 이어져 있기 때문에, 자식 프로세스의 자식 프로세스에서 실행한 ls의 결과가
grep e
의 입력 값으로 넘어옴 execve
함수를 호출하여grep
실행 파일을 실행한 뒤 종료됨
- 부모 프로세스는
waitpid
함수를 호출하여 자식 프로세스가 종료 될때까지 기다림 - 터미널에
ls | grep e
결과가 출력 됨
ls > test.txt
입력- text.txt 파일을
open
함수를 이용하여 기존의 파일 내용을 삭제하는 옵션으로 파일 열기(>>
일 경우, 덮어쓰기 옵션으로 파일 열기) fork
함수를 호출하여 자식 프로세스 생성- 자식 프로세스는
execve
함수를 호출하여 ls 실행 파일을 실행한 뒤 종료됨 - 부모 프로세스는
waitpid
함수를 호출하여 자식 프로세스가 종료 될때까지 기다림 - test.txt에
ls
의 결과가 저장됨
cat < test.txt
입력- text.txt 파일을
open
함수를 이용하여 읽기 전용 옵션으로 파일 열기 fork
함수를 호출하여 자식 프로세스 생성- 자식 프로세스는
execve
함수를 호출하여cat
실행 파일을 실행한 뒤 종료됨 - 부모 프로세스는
waitpid
함수를 호출하여 자식 프로세스가 종료 될때까지 기다림 - test.txt의 내용이 터미널로 출력 됨