maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #08893
Re: [Commits] 6811945e: MDEV-6756: map a linux pid (child pid) to a connection id shown in the output of SHOW PROCESSLIST
Hi, Oleksandr!
On Sep 14, Oleksandr Byelkin wrote:
> > Don't match OS name please, better use
> >
> > #ifdef HAVE_SYS_SYSCALL_H
> > #include <sys/syscall.h>
> > #endif
> > ...
> > #ifdef __NR_gettid
> > ...
> > #endif
> Are there way to check that it has thread ID syscall particulary (I am
> afraid that most OSes has syscall)?
That's why you put the code inside
#ifdef __NR_gettid
...
#endif
> >> diff --git a/sql/sql_class.cc b/sql/sql_class.cc
> >> index bf161b2..20c03fe 100644
> >> --- a/sql/sql_class.cc
> >> +++ b/sql/sql_class.cc
> >> @@ -2062,6 +2068,13 @@ bool THD::store_globals()
> >> This allows us to move THD to different threads if needed.
> >> */
> >> mysys_var->id= thread_id;
> >> +#ifdef HAVE_TID_SYSCALL
> >> + os_pid= getpid();
> > why would you want to have pid there? isn't it the same for all threads?
> No, it (PID) differs from thread on 1 and it is what actually shown in
> the process list.
'man gettid' says
In a multithreaded process, all threads have the same PID,
but each one has a unique TID.
I've just tried:
====================================================
#define _GNU_SOURCE
#include <pthread.h>
#include <sys/types.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
void *print(void *a) {
printf("%u %ld %lu\n", getpid(), syscall(__NR_gettid), pthread_self());
sleep(10);
}
main() {
int i;
pthread_t t;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
for (i=0; i < 20; i++)
pthread_create(&t, &attr, print, 0);
print(0);
}
====================================================
for me all threads do have the same PID (I tried with and without attr).
> My understanding is that each thread group has own PID, and now we
> have threads each in its own group, so they have both PID and thread
> ID different and unique.
That's not what I see.
> Thread IDs are really unique ID for thread, but I was not able to make
> ps show it. It shows PID in TID column at least on my computer, so I
> decided to have them both is the best variant.
>From 'man ps':
====================================================
THREAD DISPLAY
H Show threads as if they were processes.
-L Show threads, possibly with LWP and NLWP columns.
m Show threads after processes.
-m Show threads after processes.
-T Show threads, possibly with SPID column.
====================================================
all these switches worked for me, showing threads and either showing
tid automatically (-L, -T) or when I requested it with -o tid.
Regards,
Sergei
References