LINUX.ORG.RU

Странное поведение thread


0

0

Сделал простую программу (pthread-test1) с использованием pthread на RedHat 8.
В результате ее запуска по 'ps -AH' видно только один процесс pthread-test1 вообще без дочерних. Что за ерунда? Или это может особенность RH8?

====================================================================
#include <pthread.h> 
#include <stdio.h> 
#include <time.h> 

int glob = 0;

void *thread_proc(void *val)
{
    int i = 0;
//    nice(10);
    while (1)
    {
        printf((char *) val);
        printf("[%d] %d clocks %d %d %d\n", pthread_self(), clock(), i++, glob++, getpriority());
    };
    return NULL;
};

int main()
{
    pthread_t tid1, tid2, tid3, tid4;

    pthread_create (&tid1, NULL, &thread_proc, (void *) "String 1 ");
    pthread_create (&tid2, NULL, &thread_proc, (void *) "String 2 ");
    pthread_create (&tid3, NULL, &thread_proc, (void *) "String 3 ");
    pthread_create (&tid4, NULL, &thread_proc, (void *) "String 4 ");

    int i = 0;

    while (1)
    {
        printf("Main thread ");
        printf("%d clocks %d %d\n", clock(), i++, glob++);
    };

    return 0;
};
====================================================================

Не знаю как на РХ8, а на SuSE 8 выдало следующее

ps -AH | grep test
6345 pts/2 00:00:04 test
6346 pts/2 00:00:00 test
6347 pts/2 00:00:04 test
6348 pts/2 00:00:03 test
6349 pts/2 00:00:03 test
6350 pts/2 00:00:04 test

Dead ★★★★
()

Ну так и я про то-же. Дома у меня на Mandrake 9.1. выдается нормальные несколько процессов, а на RH8 - только один. :(
Может это особенности реализации pthread на RH8?

UncleAndy ★★★
() автор топика

# ps -ax | grep test

1794 pts/0 S 0:01 ./test 1803 pts/1 S 0:00 grep test

# ps -axm | grep test 1794 pts/0 S 0:00 ./test 1795 pts/0 S 0:00 ./test 1796 pts/0 S 0:00 ./test 1797 pts/0 S 0:00 ./test 1798 pts/0 S 0:00 ./test 1799 pts/0 S 0:00 ./test 1801 pts/1 S 0:00 grep test

Там ключик такой есть...

И по мойму всё зависит от версии procps (ps), я ставил его из сорцов редхата 8.0, версия procps - 2.0.7, он если и показывает по умолчанию thread-ы, то далеко не все...

shandor
()

# ps -ax | grep test

1794 pts/0 S 0:01 ./test
1803 pts/1 S 0:00 grep test

# ps -axm | grep test

1794 pts/0 S 0:00 ./test
1795 pts/0 S 0:00 ./test
1796 pts/0 S 0:00 ./test
1797 pts/0 S 0:00 ./test
1798 pts/0 S 0:00 ./test
1799 pts/0 S 0:00 ./test
1801 pts/1 S 0:00 grep test

Там ключик такой есть...

И по мойму всё зависит от версии procps (ps), я ставил его из сорцов редхата 8.0, версия procps - 2.0.7, он если и показывает по умолчанию thread-ы, то далеко не все...

shandor
()

Скорее, всё зависит от версии ядра, и от того, что они там успели переделать:

1. В Linux до самого последнего времени не было нормальной (в смысле POSIX) реализации thread - там это делалось через clone(), т.е. эмуляцией thread через потоки...

2. Вот ваш же вывод:

>6345 pts/2 00:00:04 test >6346 pts/2 00:00:00 test >6347 pts/2 00:00:04 test >6348 pts/2 00:00:03 test >6349 pts/2 00:00:03 test >6350 pts/2 00:00:04 test

- у thread-ветвей не может быть различных pid...

3. Может в RedHat 8 (какое там ядро?) что-то начало меняться?

anonymous
()

Всем спасибо.
Это всетаки проблемы вывода. Т.е. по ps -axm все показывается в отдельных строчках.

UncleAndy ★★★
() автор топика

неаааааааа

у меня версия ядра менялась от 2.4.17 до 2.4.20, везде одна и таже хрень, а вот то что на разных версиях psproc и одинаковых версиях ядра разный вывод ps - это факт.

а то что у каждого thread-а свой PID - это тоже факт

p.s. (используйте 'User Line Breakes' а не 'TeX paragraphs', мля, и кто это придумал...)

shandor
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.