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

+ Recent posts