Thanks for your reply. >-----Original Message----- >From: Peter Zijlstra [mailto:pet...@infradead.org] >Sent: Monday, June 23, 2014 5:13 PM >To: Tony Lu >Cc: Paul Mackerras; Ingo Molnar; Arnaldo Carvalho de Melo; >linux-kernel@vger.kernel.org; Chris Metcalf >Subject: Re: [BUG] perf: can not resolve symbols for forked threads > >On Thu, Jun 19, 2014 at 07:39:42AM +0000, Tony Lu wrote: >> Hi >> >> I got the below output that shows perf can not resolve symbols for >> forked threads. I did a system-wide collection from all CPUs after the >> application hello run. > >There's no fork() in... :-)
Yes, but perf regards pthread_created threads as forked threads, and a PERF_RECORD_FORK event will be delivered when a thread is forked or cloned. > >> #include <pthread.h> >> #include <stdio.h> >> #include <stdlib.h> >> #include <unistd.h> >> #define NUM_THREADS 5 >> >> void foo(void) >> { >> long i = 1000000000; >> while (i--) { >> ; >> } >> } >> >> void *PrintHello(void *threadid) >> { >> long tid; >> tid = (long)threadid; >> printf("Hello World! It's me, thread #%ld!\n", tid); >> foo(); >> pthread_exit(NULL); >> } >> >> int main(int argc, char *argv[]) >> { >> pthread_t threads[NUM_THREADS]; >> int rc; >> long t; >> for(t=0;t<NUM_THREADS;t++){ >> printf("In main: creating thread %ld\n", t); >> rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); >> if (rc){ >> printf("ERROR; return code from pthread_create() is %d\n", rc); >> exit(-1); >> } >> } >> >> /* Last thing that main() should do */ >> pthread_exit(NULL); >> } > >That pthread_exit() is the problem; this results in: > >29456 pts/23 Zl 0:00 | \_ [hello] <defunct> > >You want to wait for the threads to complete using pthread_join(). > >I suspect the defunct state hides the process. Yes, using pthread_join() can workaround this problem. Does that mean the parent thread can not exit before the child threads? It still seems like a perf bug. -Thanks -Tony -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/