wait() 시스템콜
1. wait함수를 사용하면, fork()함수 호출시 자식 프로세스가 종료할 때까지, 부모 프로세스가 기다림
2. 자식 프로세스와 부모 프로세스의 동기화, 부모 프로세스가 자식 프로세스보다 먼저 죽는 경우를 막기 위해 사용
→ 하나의 프로세스 안에서 fork, 자식프로세스가 생기면 그 안에서 exec 실행되고 종료(exit)
부모 프로세스에 wait라고 적어 놓으면 자식프로세스가 끝날 때까지 기다린다.
자식 프로세스가 다 끝나면 디폴트로 SIGCHID 라고 하는 시그널이 부모프로세스에 보내지게 된다.
부모프로세스는 시그널을 받을 때까지 기다리게 되고 받으면 wait 밑에 있는 코드를 실행하게 된다.
wait()없이 부모 프로세스가 먼저 끝나버리면 문제가 된다.
왜냐하면 자식 프로세스가 다 끝나면 바로 죽지 않기 때문이다.
( 자식 프로세스가 정상적으로 종료했는지 오류가 났는지 정보를 메모리에 공간을 차지하고 있고, 이 공간을 부모 프로세스가 확인을 하면 자식 프로세스가 죽게 된다. wait 함수를 안쓰면 부모 프로세스가 먼저 끝날 수 있고 자식 프로세스는 그 정보를 그대로 메모리에 내버려두고 남아 있을 수 있다.)
부모 프로세스가 먼저 끝나버리면 자식프로세스는 정보를 그대로 메모리에 내버려둔채 남아있을 수 있다.
(좀비 프로세스)
fork(), execl(), wait() 시스템콜
1. execl()만 사용하면, 부모 프로세스가 사라짐.
2. 이를 유지하기 위해, fork()로 새로운 프로세스 공간 복사 후, execl()사용.
3. wait()함수를 사용해서 부모프로세스가 자식프로세스가 끝날때까지 기다릴 수 있음
→ 쉘 프로그램은 fork(), exec() 계열, wait()함수를 기반으로 작성 가능!
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
'CS > 시스템 프로그래밍' 카테고리의 다른 글
프로세스 종료(exit) (0) | 2022.03.02 |
---|---|
프로세스 생성(copy on write) (0) | 2022.03.02 |
프로세스 생성(exec) (0) | 2022.03.02 |
프로세스 생성(fork) (0) | 2022.03.02 |
프로세스 ID (0) | 2022.03.02 |