프로세스 생성(wait)과 나만의 쉘만들기

2021. 3. 8. 18:56Computer(인강)/시스템 프로그래밍

728x90
반응형

안녕하세요 bannavi입니다^ㅅ^

오늘은 프로세스 생성과 나만의 쉘만들기 부분을 실습해보겠습니다

바로 시작하겠습니다

 

 

 

fork()와 exec()

 

리눅스 프로세스 실행

1. 부모 프로세스로부터 새로운 프로세스 공간을 만들고, 부모 프로세스 데이터 복사(fork)

2. 새로운 프로세스를 위한 바이너리를 새로운 프로세스 공간에 덮어씌움(exec)

 

지난 시간에 이 두개를 배웠었죠, 여기서 드는 의문점 하나

왜 두개를 나눴을까...싶은거죠

 

fork와 exec가 순차적으로 실행이 되서 자식 프로세스가 생성이 된다.

이게 리눅스의 프로세스 생성 방식이다.

 

 

 

wait() 시스템콜

1. wait함수를 사용하면, fork()함수 호출시 자식 프로세스가 종료할 때까지, 부모 프로세스가 기다림 

2. 자식 프로세스와 부모 프로세스의 동기화, 부모 프로세스가 자식 프로세스보다 먼저 죽는 경우를 막기 위해 사용(고아 프로세스)  

 

wait()없이 부모 프로세스가 먼저 끝나버리면 문제가 됩니다. 왜냐하면 

자식 프로세스가 다 끝나면 죽지 않습니다.

부모 프로세스가 먼저 끝나버리면 자식프로세스는 저 정보를 그대로 메모리에 내버려둔채 남아있을 수 있습니다(좀비 프로세스)

 

 

아래는 전형적인 shell프로그램을 작성하는 구조이자

프로세스를 리눅스에서 생성하는 방식과 같다.

정리

 

1. execl()만 사용하면, 부모 프로세스가 사라짐.

2. 이를 유지하기 위해, fork()로 새로운 프로세스 공간 복사 후, execl()사용.

3. wait()함수를 사용해서 부모프로세스가 자식프로세스가 끝날때까지 기다릴 수 있음.

* 쉘 프로그램은 fork(), exec() 계열, wait()함수를 기반으로 작성 가능!

 

 

728x90
반응형

'Computer(인강) > 시스템 프로그래밍' 카테고리의 다른 글

프로세스 종료  (0) 2021.03.09
프로세스 생성(copy on write)  (0) 2021.03.09
프로세스 생성(exec)  (0) 2021.03.08
프로세스 생성(fork)  (0) 2021.03.08
프로세스ID 시스템콜  (0) 2021.03.08