waitpid 2

리눅스 프로세스 생성, 실행 그리고 제어

프로세스 생성 자식 프로세스를 생성하는 fork 함수에 대해 알아보자. 보다시피 반환값을 2가지 가진다 (실패 제외) 자식프로세스 값, 부모 프로세스 값. 자식은 getppid() 함수를 이용해 부모 프로세스의 pid를 얼마든지 알아낼 수 있고, 부모는 하나뿐이지만 부모는 여러개의 자식프로세스를 가질 수 있고 별도의 자식pid를 알아낼 함수가 존재하지 않는다. 보통 자식프로세스가 생성되면 부모의 pid값에 +1한 값이 자식프로세스의 pid이다. fork가 자식프로세스를 생성하고 나서도 부모, 자식 프로세스 두가지 모두 정상적으로 실행된다. fork로 생성된 자식프로세스는 부모 프로세스의 복사본이다. 다만, 코드(텍스트) 세그먼트는 복사하지 않고 공유한다. 중요한 것은, 자식은 부모와 메모리 영역을 공유하..

시그널 핸들링(SIGCHLD)

TCP echo server, client에 대해 봤다. 그럼 이 프로그램의 정상적인 시작과 종료에 대해 알아보자. 처음에 클라이언트가 연결 요청을 하지 않았을 때, 서버는 listen 상태 일 것이다. netstat -a 명령을 통해 local ip :*, local port : 9877 로 listen 상태인 것을 확인할 수 있다. 그럼 이제 클라이언트 요청에 의해 서버가 연결된 모습을 보자. 보다 시피 연결이 되었을 때는 ESTABLISHED 상태가 되어 있다. 서버의 자식 소켓과 클라이언트 소켓이 ESTABLISHED 상태가 되어 있고, 서버의 부모 소켓은 여전히 Listen 상태가 되어 있다. 그럼 이번에 정상종료 하는 것을 보자. 서버의 자식 소켓의 연결이 끊어지면 부모 소켓으로 SIGCHLD..

반응형