我在使用pthread库的嵌入式linux上有linux应用程序。不时pthread"经理"线程获得信号33并崩溃。
我如何知道谁在发送信号?
Strace日志:
...
18:15:07 getppid() = 30
18:15:07 poll([{fd=31, events=POLLIN}], 1, 2000) = 0
18:15:09 getppid() = 30
18:15:09 poll([{fd=31, events=POLLIN}], 1, 2000) = 0
18:15:11 getppid() = 30
18:15:11 poll([{fd=31, events=POLLIN}], 1, 2000) = 0
18:15:13 getppid() = 30
18:15:13 poll([{fd=31, events=POLLIN}], 1, 2000) = -1 EINTR (Interrupted system call)
18:15:13 --- SIGRT_1 (Unknown signal 33) @ 0 (0) ---
18:15:13 getppid() = 30
18:15:13 wait4(-1, [WIFSIGNALED(s) && WTERMSIG(s) == SIGSEGV], WNOHANG|__WCLONE, NULL) = 68
18:15:13 --- SIGSEGV (Segmentation fault) @ 0 (0) ---
答案 0 :(得分:1)
信号33由pthreads库在内部使用(它被称为SIGSETXID
,并且只要进程的一个uid或gids发生更改,就会由库为每个线程引发。)
它不应该导致线程崩溃。为什么你认为这个信号是负责任的?