문제

현재 배경 스레드 (pthread_detached)를 생성 한 다음 pthread_exit (0)를 호출하는 멀티 스레드 프로그램 (pthreads 사용)으로 작업하고 있습니다. 내 문제는 프로세스가 "소멸"으로 나열되고 호기심이 /Proc (내 디버깅 전략을 물리 치는 것)에 "실제로 존재하는"것 같다는 것입니다.

다음 요구 사항을 충족시키고 싶습니다.

  • 프로그램은 루프에서 기능을 실행하고 B를 한 번에 실행해야합니다.
  • 프로그램/proc/$ pid/exe의 PID를 감안할 때,/proc/$ pid/maps 및/proc/$ pid/fd는 액세스 할 수 있어야합니다 (프로세스가 소멸되면 모두 비어 있거나 유효하지 않은 링크입니다).
  • 평소와 같이 Ctrl+C 및 Ctrl+Z로 프로그램을 중단/방해 할 수 있어야합니다.

편집하다: 스폰 된 스레드에 "메인"스레드와 B가있는 프로그램의 인터페이스를 주저합니다 (현재 다른 방식으로). 문제가 해결 될까요?

도움이 되었습니까?

해결책

신호를 기다리는 기본 프로세스의 실행을 중단하거나 스레드를 분리하지 않을 수 있습니다 (기본값 사용 phtread_crate_joinable) a pthread_join().

다른 팁

다른 방식으로 일을 할 수없는 이유가 있습니까? 메인 스레드가 루프를 실행하고 백그라운드 스레드에서 일회성 작업을 수행합니까?

가장 우아한 디자인은 아니지만 다음과 같이 나가기 전에 메인 스레드를 차단할 수 있습니다.

 while(1) {
       pause();
 }

그런 다음 루프를 깨뜨리는 Sigint 및 Sigterm 용 신호 핸들러를 설치할 수 있습니다. 가장 쉬운 방법은 Exit (0) :-)입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top