logo

Linux에서 하위 프로세스의 종료 상태

다음과 같이 알려져 있습니다. 포크() 시스템 호출은 호출자 프로세스의 하위 프로세스가 되는 새 프로세스를 생성하는 데 사용됩니다. 
종료 시 자식은 부모에게 반환되어야 하는 종료 상태를 떠납니다. 그래서 아이가 끝나면 좀비 .
자식이 나가거나 멈출 때마다 부모는 SIGCHLD 신호. 
부모는 WIFEXITED 및 WEXITSTATUS 매크로와 함께 시스템 호출 wait() 또는 waitpid()를 사용하여 중지된 자식의 상태를 알아볼 수 있습니다.
(*)wait() 시스템 호출: 자식 프로세스 중 하나가 종료될 때까지 호출 프로세스의 실행을 일시 중지합니다. 
wait() 시스템 호출 구문: 

pid_t wait(int *status);


(*) waitpid() 시스템 호출: pid 인수로 지정된 하위 항목의 상태가 변경될 때까지 호출 프로세스의 실행을 일시 중지합니다. 
waitpid() 시스템 호출 구문: 

pid_t waitpid(pid_t pid int *status int options)


참고: 기본적으로 waitpid()는 종료된 하위 항목만 기다리지만 이 동작은 WIFEXITED WEXITSTATUS 등과 같은 옵션 인수를 통해 수정할 수 있습니다.
pid의 값은 다음과 같습니다. 
 



  1. -1 미만 : 프로세스 그룹 ID가 pid의 절대값과 동일한 하위 프로세스를 기다리는 것을 의미합니다.
  2. -1과 같음 : 하위 프로세스를 기다림을 의미합니다.
  3. Equal to 0 : 프로세스 그룹 ID가 호출 프로세스의 ID와 동일한 하위 프로세스를 기다리는 것을 의미합니다.
  4. 0보다 큼 : 프로세스 ID가 pid 값과 동일한 하위 항목을 기다린다는 의미입니다.


WIFEXITED 및 WEXITSTATUS는 자녀의 종료 상태를 아는 데 사용할 수 있는 두 가지 옵션입니다. 
WIFEXITED(status) : 자식이 정상적으로 종료되면 true를 반환합니다.
WEXITSTATUS(status) : 자식의 종료 상태를 반환합니다. 이 매크로는 WIFEXITED가 true를 반환한 경우에만 사용해야 합니다.
다음은 어린이가 사용하는 C 구현입니다. 실행() 함수이지만 execl()에 지정된 경로가 정의되지 않았습니다. 
부모가 얻는 자식의 종료 상태 값이 무엇인지 살펴보겠습니다.

C
// C code to find the exit status of child process #include  #include  #include  #include  #include  // Driver code int main(void) {  pid_t pid = fork();    if ( pid == 0 )  {  /* The pathname of the file passed to execl()  is not defined */  execl('/bin/sh' 'bin/sh' '-c' './nopath' NULL);  }  int status;    waitpid(pid &status 0);  if ( WIFEXITED(status) )  {  int exit_status = WEXITSTATUS(status);   printf('Exit status of the child was %dn'   exit_status);  }  return 0; } 

산출: 
 

Linux에서 하위 프로세스의 종료 상태
 

메모 : 위의 코드는 fork()가 비활성화되어 있으므로 온라인 컴파일러에서는 작동하지 않을 수 있습니다.
여기서 종료 상태는 127이며 이는 경로에 문제가 있거나 오타가 있음을 나타냅니다.
추가 정보를 위해 아래에 몇 가지 종료 상태 코드가 나열되어 있습니다. 
 

  • 1 : '0으로 나누기'와 같은 기타 오류 및 기타 허용되지 않는 작업입니다.

  • 2 : 키워드나 명령이 누락되었거나 권한 문제가 있습니다.
  • 126 : 권한 문제 또는 명령이 실행 가능하지 않습니다.
  • 128: 종료 인수가 잘못되었습니다.


참고: C 표준은 반환 코드의 의미를 정의하지 않습니다. 반환 코드 사용 규칙은 플랫폼에 따라 다릅니다.
 

퀴즈 만들기