programing

하위 프로세스를 종료하는 방법 - _hostname vs. exit

prostudy 2022. 4. 27. 21:36
반응형

하위 프로세스를 종료하는 방법 - _hostname vs. exit

다음 코드 조각을 고려하십시오.

pid_t cpid = fork();

if (cpid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (cpid == 0) { // in child
    execvp(argv[1], argv + 1);
    perror("execvp");
    _exit(EXIT_FAILURE);
}

// in parent

집행부가 돌아오면 아동 과정을 어떻게 끝내야 할까?출구()를 사용할 것인가, 아니면 _exit()를 사용할 것인가?

반드시 사용해야 한다._Exit().exit()추가한 기능을 호출하십시오.atexit()그리고 다음으로 생성된 파일 삭제tmpfile()부모 과정이란 것이 실제로 존재했을 때 이런 일을 하기를 바라는 것이기 때문에, 당신은 전화를 해야 한다._Exit()이것들 중 아무 것도 하지 않는 것.

공지_Exit()대문자 E로_exit(2)아마 직접 전화하고 싶은 건 아닐 겁니다 exit(3)그리고_Exit(3)전화해줄게없으면_Exit(3), 그리고 네,_exit()네가 원했던 거야

포크()의 아이는 항상 _exit()를 불러야 한다.

대신 출구()를 호출하는 것은 보류 중인 stdio 버퍼가 두 번 플러시되도록 하는 좋은 방법이다.

executevp가 성공하면 아이를 종료할 수 있으므로 종료할 필요가 없다.

실행 실패 시 나는 단지 사용한다.exit(EXIT_FAILURE);어린아이에

편집 : 몇 가지 조사를 한 결과 http://www.unixguide.net/unix/programming/1.1.3.shtml이라는 것을 알게 되었다.

그래서 쓰는 게 더 좋은 것 같다._exit()특히 당신이 C++:p에 있을 때 포크 아이에게서 나는 당신의 질문 덕분에 무언가를 배웠다.d

원하는 행동에 따라 달라진다.man -s 3 exit그리고man _exit시스템에 대한 자세한 내용을 보려면 다음을 수행하십시오.일반적으로 나는 _exit가 atexit()에 등록된 기능을 실행하지 않는 반면에 _exit는 atexit()에 등록된 기능을 실행하지 않는다고 믿는다(이 기능들은 exit를 호출하지 않는 것이 좋다 - 그렇지 않으면 재귀가 된다).

일반적으로 나는 _exit보다 출구를 더 선호한다. _exit에 등록된 기능을 제외하고, 필요하다면 _exit라고 부르고 싶다.

exit()ANSI-C 함수로 운영체제 독립적이다.모든 ANSI-C 표준 기능을 닫는다. _exit()에 의해 불려지다exit()다음과 같은 이유로 운영 체제에 따라 기능을 종료한다.exit()그들에 대해 전혀 모르고 있어(exit운영 체제에 독립적임)

참조URL: https://stackoverflow.com/questions/2329640/how-to-exit-a-child-process-exit-vs-exit

반응형