• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

pid = wait(&exit_status) 질문입니다.

21.04.06 00:34 작성 조회수 218

1

C언어에서 기본적으로

A = B이면

B라는 값을 A에 할당한다. (Assignment Operator)로 알고있는데요.

pid = wait(&exit_status)를 쓰면 어떻게 부모 프로세스가 자식 프로세스가 종료되기를 기다리는건지 모르겠습니다.

정확히 말하면 &exit_status가 어떻게 생성되는건지 설명을 부탁드립니다.

wstatus가 자식의 종료 상태를 의미한다는데 저 코드 내부에서는 자식의 종료상태를 어떻게 반환한건지 명시가 되어있지 않은거같아 여쭤봅니다....!

추가로 프로세스 여러개를 fork() 할 경우 - 자식 프로세스 여러개 생성시 terminate 할때

wait()를 어떻게 코딩해야 할지 고민이 됩니다..... 혹시 이에 관해 고견 여쭤봐도 될지요...?

답변 1

답변을 작성해보세요.

0

안녕하세요. 김윤식님.

답변 드립니다.

C언어에서  = 는 할당 연산자가 맞습니다.

다만 오른쪽에 함수가 있는 경우, 함수를 실행하고 함수가 return해준 값을 왼쪽 변수에 저장하게 됩니다.

pid = wait(&exit_status) 에서...

wait() 함수는 자식 프로세스가 종료되기를 기다리다가 자식 프로세스가 종료되면 그제서야 함수가 리턴됩니다.

wait() 함수가 리턴해주는 값은 종료된 자식 프로세스의 pid 입니다. 그 값이 pid 변수에 저장되겠네요.

wait() 함수가 리턴될 때 exit_status 변수도 적절히 설정합니다. exit_status 변수를 통해 자식 프로세스의 종료 상태에 대한 정보를 얻을 수 있습니다. wait() 함수의 man page를 보시면 WEXITSTATUS() 등의 매크로를 확인하실 수 있습니다. 이런 매크로를 이용해 자식 프로세스의 정보를 얻는 것입니다.

여러 자식 프로세스에 대한 프로그래밍 방법은.. 어떤 프로그램을 작성하시는 것이냐에 따라 설계가 달라질 수 있습니다. 단순히 10개의 자식을 만들고 자식이 모두 죽기를 기다린다고 한다면 wait()을 10번 호출하면 될 것입니다. 각각의 자식 프로세스마다 특별한 작업을 하려면 각 자식 프로세스의 PID를 저장해두었다가 PID 별로 따로 처리해주어야겠죠. 프로그램의 목적에 따라 달라질 수 있는 부분이라 제가 정확히 설명드리기는 조금 어려운 부분입니다.

질문에 답이 됐는지 모르겠네요. 추가 질문 있으시면 댓글로 남겨주세요 :)