Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[RFC] set the thread name

5 views
Skip to first unread message

Stefani Seibold

unread,
Jun 16, 2009, 2:50:06 PM6/16/09
to
Currently it is not easy to identify a thread in linux, because there is
no thread name like in some other OS.

If there were are thread name then we could extend a kernel segv message
and the /proc/<pid>/task/<tid>/... entries by a TName value like this:

cat /proc/492/task/495/status
Name: test
TName: RX-Data <- this is the thread identification field
State: S (sleeping)
Tgid: 492
Pid: 495
PPid: 1
.
.
.

This will it make much easier to determinate which thread id is
associated to a logical thread.

It would be possible do this without add a new entry to the task_struct.
Just use the comm entry which is available, because it has the same
value as the group_leader->comm entry.

The only thing to do is to replace all task_struct->comm access by
task_struct->group_leader->comm to have the old behavior. This can be
eventually encapsulated by a macro.

The task_struct->comm of a non group_leader would be than the name of
the thread.

The only drawback is that there are a lot of files which must be
modified. A quick
find linux-2.6.30 -type f | xargs grep -l -e "->comm\>" | wc -l
shows 215 files. But this can be handled.

So i propose a new system call to give a thread a name.

What do you think?

Greetings,
Stefani


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Bert Wesarg

unread,
Jun 16, 2009, 3:20:08 PM6/16/09
to
Hi,

On Tue, Jun 16, 2009 at 20:39, Stefani Seibold<ste...@seibold.net> wrote:
> Currently it is not easy to identify a thread in linux, because there is
> no thread name like in some other OS.
>
> If there were are thread name then we could extend a kernel segv message
> and the /proc/<pid>/task/<tid>/... entries by a TName value like this:

prctl(PR_SET_NAME, ...) works perfectly here.

Bert

/* -*- c -*- */

#define _GNU_SOURCE
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
#include <pthread.h>
#include <sys/prctl.h>

void *
thread(void *arg)
{
unsigned long i = (unsigned long)arg;
char comm[16];
snprintf(comm, sizeof comm, "task %02lu", i);
prctl(PR_SET_NAME, comm, 0l, 0l, 0l);

sleep(10);

return NULL;
}

int
main(int ac, char *av[])
{
pthread_t thr;
unsigned long i, n = 10;
char comm[16];

printf("%u\n", getpid());
sleep(5);
snprintf(comm, sizeof comm, "master");
prctl(PR_SET_NAME, comm, 0l, 0l, 0l);
sleep(5);

for (i = 0; i < n; i++)
pthread_create(&thr, NULL, thread, (void *)i);

pthread_join(thr, NULL);

return 0;

Stefani Seibold

unread,
Jun 16, 2009, 3:50:11 PM6/16/09
to
Am Dienstag, den 16.06.2009, 21:14 +0200 schrieb Bert Wesarg:
> Hi,
>
> On Tue, Jun 16, 2009 at 20:39, Stefani Seibold<ste...@seibold.net> wrote:
> > Currently it is not easy to identify a thread in linux, because there is
> > no thread name like in some other OS.
> >
> > If there were are thread name then we could extend a kernel segv message
> > and the /proc/<pid>/task/<tid>/... entries by a TName value like this:
> prctl(PR_SET_NAME, ...) works perfectly here.
>
Ooops... I did not noticed that this is already implemented. Thats works
perfectly ;-)

Stefani Seibold

unread,
Jun 16, 2009, 4:00:13 PM6/16/09
to
Am Dienstag, den 16.06.2009, 21:14 +0200 schrieb Bert Wesarg:
> Hi,
>
> On Tue, Jun 16, 2009 at 20:39, Stefani Seibold<ste...@seibold.net> wrote:
> > Currently it is not easy to identify a thread in linux, because there is
> > no thread name like in some other OS.
> >
> > If there were are thread name then we could extend a kernel segv message
> > and the /proc/<pid>/task/<tid>/... entries by a TName value like this:
> prctl(PR_SET_NAME, ...) works perfectly here.
>

I checked it now a little bit more. It is true it works, but if i do a
segv access inside a thread a get the kernel message like:

task 09[17395]: segfault at 0 ip 08048612 sp b363c370 error 6 in
a.out[8048000+1000]

So the current implementation is not exactly what i expect. I would
prefer my solution to replace every access thread_struct->comm to
task_struct->group_leader->comm to have the right behavior.

The new system call is obsolete, it is still there.

KOSAKI Motohiro

unread,
Jun 16, 2009, 9:20:08 PM6/16/09
to
(cc to linux-api)

> Hi,
>
> On Tue, Jun 16, 2009 at 20:39, Stefani Seibold<ste...@seibold.net> wrote:
> > Currently it is not easy to identify a thread in linux, because there is
> > no thread name like in some other OS.
> >
> > If there were are thread name then we could extend a kernel segv message
> > and the /proc/<pid>/task/<tid>/... entries by a TName value like this:
> prctl(PR_SET_NAME, ...) works perfectly here.

Oops, but man page describe another thing.

PR_SET_NAME
(Since Linux 2.6.9) Set the process name for the calling process
to arg2. ^^^^^^^^^^^^

Should we change man page? or change implementation?

I bet many developer assume the implementation is right.

> > More majordomo info at ?http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at ?http://www.tux.org/lkml/

0 new messages