programing

기존 Linux fork-exec에서 _exit() & exit()를 사용하는 것과 어떤 차이가 있습니까?

sourcetip 2022. 7. 9. 09:52
반응형

기존 Linux fork-exec에서 _exit() & exit()를 사용하는 것과 어떤 차이가 있습니까?

Linux에서 포크 실행 메커니즘이 어떻게 사용되는지 알아보려고 노력했습니다.몇몇 웹페이지가 나를 혼란스럽게 하기 전까지는 모든 것이 계획대로 진행되고 있었다.

아동 과정은 엄격하게 사용해야 한다고 합니다._exit()단순한 것이 아니라exit()또는 에서 정상적으로 복귀한다.main().

제가 알기로는 Linux 쉘은 모든 외부 명령어를 포크로 실행합니다.상기 내용이 사실이라고 가정하면 결론적으로 Linux 쉘 내에서 발생하는 외부 명령어나 다른 실행은 모두 정상 복귀를 할 수 없습니다.

Wikipedia 및 기타 일부 웹 페이지는 우리가 사용해야 한다고 주장합니다._exit()stdio 버퍼가 이중으로 플러시될 수 있는 동안 하위 프로세스가 부모 임시 파일을 삭제하는 것을 방지하기 위해서입니다.전자는 이해하지만 버퍼의 더블 플러시가 Linux 시스템에 어떤 해를 끼칠 수 있는지 알 수 없습니다.

하루 종일 이 일에 몰두했는데...설명해 주셔서 감사합니다.

(또는 그 동의어)를 사용해야 합니다._Exit)이(가) 자 프로그램을 중단합니다.exec이 상황에서는 자녀 프로세스가 부모 프로세스의 외부 데이터(파일)를 호출하여 간섭할 수 있기 때문에 에 실패합니다.atexit핸들러, 그 신호 핸들러 호출 및/또는 버퍼 플러시.

같은 이유로, 당신은 또한 다음을 사용해야 합니다._exit하지 않는 모든 자녀 프로세스에서exec하지만 그런 경우는 드물죠.

다른 모든 경우에는 그냥 사용하세요.exit당신이 부분적으로 언급했듯이 Unix/Linux의 모든 프로세스 (1개 제외)init)는 다른 프로세스의 하위 프로세스이므로_exit모든 아동 과정에 있어서exit이외에는 쓸모가 없다init.

switch (fork()) {
  case 0:
    // we're the child
    execlp("some", "program", NULL);
    _exit(1);  // <-- HERE
  case -1:
    // error, no fork done ...
  default:
    // we're the parent ...
}

exit()는 기존 C 라이브러리를 사용하여 _exit()의 맨 위에 있습니다.

차이는 다음과 같습니다.

  1. _dio()는 stdio 버퍼를 플러시하지 않고 exit()는 stdio 버퍼를 플러시합니다.

  2. exit()은 어떤 함수(on_filter 또는 at_filter)에 등록하여 프로그램이 존재하기 전에 필요한 경우 정리 프로세스를 수행할 수 있는 반면 _filter()는 정리 프로세스를 수행할 수 없습니다.

exit(status)는 종료 상태를 _exit(status)로 전달합니다.자녀와 부모 사이에서 fork()를 실행할 때는 항상 _exit()를 사용하고 exit()를 사용하는 것이 좋습니다.

exit() io에 등록된 등의 합니다.atexit()exit()_end( )

_exit()그렇게 하지 않고 프로세스를 종료합니다.가 전화하는 거야_exit()예를 들어 데몬을 생성할 때 부모 프로세스에서 가져옵니다.

요?main()?? 애초에 뭐라고 불렀는지 않아초에뭐뭐뭐 렀렀렀? 렀???? 중인 대한 실행 가능 c의 을 호출합니다._start() 이 전화를 main()의 경우, 삭제main()하고 나서, 콜을 합니다._end()에는 C에 약간 하는 것이 있습니다._end()&_start()

exit() ★★★★★★★★★★★★★★★★★」_exit()_end()

- ★★★★★★★★★★★★★★★★ ★★main()밖에 없다exit() ( (또는)의 )main())

fork() , , , , 을 사용하는 것은 .exit()stdio 버퍼가 두 번 플러시되고 임시 파일이 예기치 않게 삭제될 수 있기 때문입니다.

발췌: http://www.unixguide.net/unix/programming/1.1.3.shtml

언급URL : https://stackoverflow.com/questions/5422831/what-is-the-difference-between-using-exit-exit-in-a-conventional-linux-fo

반응형