2016-06-30 6 views
0

리눅스에 단일 프로세스로 실행되는 임베디드 애플리케이션이 있습니다. 내 스레드가 종료했는지 확인해야합니까?

나는 등

과정은 응용 프로그램처럼, 영원히 실행해야 모두의 몇 스레드를 가지고 세그먼트 오류 등의 문제를 잡으려고 sigaction()를 사용합니다.

제 질문은 스레드 중 하나가 죽으면 (그리고 어떻게) 감지해야하는지입니다.

스레드의 오류가 응용 프로그램의 sigaction() 처리기에 의해 catch됩니까?

pthread_cleanup_push/pop을 사용하려고 생각했지만 this page은 "프로세스 내의 임의의 스레드가 exit, _Exit 또는 _exit를 호출하면 전체 프로세스가 종료됩니다"라고 말하며, 따라서 프로세스 레벨에서 죽어가는 스레드가 잡히지 않을지 궁금합니다. ...

답변

1

하위 스레드가 완료되었는지 확인해야 할 필요는 없습니다. 자식 스레드가 처리를 완료 한 후에 무언가를 수행해야하는 경우 기본 스레드에서 thread_join()을 호출 할 수 있으므로 자식 스레드가 실행을 완료 할 때까지 대기하고 이후에는 나머지 작업을 수행 할 수 있습니다. 주 스레드에서 thread_exit을 사용하는 경우 완료되면 스레드가 종료되고 생성 된 스레드는 실행을 계속합니다. 모든 스레드가 실행을 완료 한 후에 만 ​​프로세스가 종료됩니다.

스폰 된 스레드의 상태를 확인하려면 플래그를 사용하여 실행 중인지 여부를 감지 할 수 있습니다. 영원히 자세한 내용

해야 루프

How do you query a pthread to see if it is still running?

+0

내 스레드가이 링크를 확인하고 종료 necer, 내가 감지하려고 무엇 어떤것 충돌,하지 않는 한. 프로세스를 차단하여 스레드를 확인할 수 없습니다. 추천 메뉴가 무엇인가요? – Mawg

+0

스레드가 충돌하지 않아 프로세스가 수행하지 않습니다. 프로세스가 충돌하면 아무 것도 확인하지 않아도됩니다. –