1) SIGCHLD 로 자식 프로세스 wait() 시 프로세스가 온전하게 수행되도록 구현.
위와 같이 SIGCHLD 처리를 하여 기존의 백그라운드 수행 후 좀비 프로세스가 생기는 문제 해결.
2) ^C(SIGINT), ^\(SIGQUIT) 사용 시 쉘이 종료되지 않도록, foreground 프로세스 실행 시 SIGINT를 받으면 프로세스가
끝나도록 구현.
위와 같이 ^C(SIGINT), ^\(SIGQUIT) 를 쉘 프로세스에서는 이 시그널을 받으면 핸들러로 돌려서 동료되지 않게끔
설정하였습니다.
그리고 위와같이 쉘프로세스가 아닌 foreground에서 돌아가는 프로세스들은 ^C(SIGINT), ^|(SIGQUIT)
이 시그널들을 받으면 정상적으로 종료가 되어야 하기 때문에 exec을 하기전에 위 시그널 들을
SIG_DFL 처리 하였습니다. 백그라운드로 수행되고 있는 프로그램들은 종료가 되면 안되므로
foreground 프로세스일 경우에만 SIG_DFL을 하고 exec을 하도록 하였습니다.
'학부생 공부 > unix' 카테고리의 다른 글
쉘 구현 (Redirection, 파이프(pipes)) (6) | 2020.03.03 |
---|---|
파이프(pipes) -1 (0) | 2019.11.13 |
쉘 구현하기 . (백그라운드 실행) (0) | 2019.11.06 |