일단 테스트 16개는 다 통과했어용(vimdiff로 눈으로 비교해가면서 화긴!)
코드는 아래에있습니다.
https://github.com/prin2/shlab/blob/master/tsh.c
혹시시간남으시면 보고 피드백부탁드려요. (race condition이나 버그있을경우)
직접 코딩해보면서 sigchld_handler 계속 수정해가면서 했는데 아직도
waitpid(-1, &status, (WNOHANG | WUNTRACED))의 3번째 인자인 option이 잘 이해가 안가네요 ㅠㅠ
구글에 돌아다니는 pdf 쪼가리에 힌트보니까 이옵션쓰면 유용하다고 되어있어서 썼어요.
WNOHANG은 blocking 피하려고 하는거고
WUNTRACED는 stop signal 받았을때 이걸
sigchld_handler가 인지하게 하려고 넣는거라고
머릿속에 감은 잡히는데 아직 명쾌하게 풀리진 않아서
다른 간단한 예제몇번 짜봐야 할것 같네요.
마지막으로 bash 쉘 만든사람은 정말 대단한것 같아용 ㅋㅋ
간단한 쉘을 구현했나 보구나. 수고했다. 물론 코드는 길어서 보지는 않았다 ㅎㅎ
와 신기하당
몇가지 의문점이 있는데... sig_atomic_t 안 써도 잘 돌아 감?
그리고 sigchld_handler에서 job 여러개가 wait 끝났을 때 잘 돌아감? 뭔가 모든 job에 대해서 처리하는 부분이 없어보이는뎅..
그리고 이건 무조건 틀린건데, 시그널 핸들러에서는 printf 쓰면 안 되요 문제생길 수 있음 - 이거 말고 책 읽다보면 동시성 프로그래밍 시에 출력을 위한 io 함수를 제공해요
rio 패키지라고 줌
http://csapp.cs.cmu.edu/2e/ics2/code/include/csapp.h