기존 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()의 맨 위에 있습니다.
차이는 다음과 같습니다.
_dio()는 stdio 버퍼를 플러시하지 않고 exit()는 stdio 버퍼를 플러시합니다.
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
'programing' 카테고리의 다른 글
내 구성 요소에서 작업에 의해 반환된 값을 사용할 수 없습니다. (0) | 2022.07.09 |
---|---|
정수 나눗셈:어떻게 더블을 만들죠? (0) | 2022.07.09 |
Vuex - 여러 탭에 걸쳐 스토어 업데이트를 유지하는 방법 (0) | 2022.07.09 |
Vue.js: 사용자가 버튼을 클릭했을 경우에만 컴포넌트를 로드합니다. (0) | 2022.07.09 |
문서에 따르면 "wrapper.vm"을 통해 "data" 속성에 액세스하는 것이 올바른 방법입니까? (0) | 2022.07.09 |