Есть простенькая программа (пример взят из Advanced Linux Programming):
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void* thread_function (void* unused)
{
fprintf(stderr, "Child thread PID = %d\n", (int) getpid());
while(1);
return NULL;
}
int main ()
{
pthread_t thread;
fprintf(stderr, "Main thread PID = %d\n", (int) getpid());
pthread_create (&thread, NULL, &thread_function, NULL);
while(1);
return 0;
}
и есть 4 Linux-системы (в скобках версия ядра) - Slackware 10.2 (2.6.12.5), Slamd64 10.1 (2.6.11.10), RedHat 9.0 (2.4.20-8) и RedHat 7.0 (не знаю)
Компилируем программу: gcc prog.c -o prog -lpthread
Запускаем эту программу на Slamd64 и RedHat7.0 и смотрим ps ax -L:
27530 27530 pts/2 R+ 0:04 ./prog
27531 27531 pts/2 S+ 0:00 ./prog
27532 27532 pts/2 R+ 0:02 ./prog
Все как должно быть (и как написано в книге) - основной поток, один дочерний thread и один управляющий thread, pid и LWP у всех разный
Запускаем эту программу на Slackware и RedHat9.0 и смотрим ps ax -L:
18544 18544 pts/5 Rl+ 0:00 ./prog
18544 18545 pts/5 Rl+ 0:00 ./prog
Управляющего потока нет, pid одинаковый
strace ./prog на Slamd64:
--cut--
clone(child_stack=0x503070, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 27543
--cut--
strace ./prog на Slackware:
--cut--
clone(child_stack=0xb7e44504, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLO NE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb7e44bf8, {entry_number:6, base_addr:0xb7e44bb0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb7e44bf8) = 18538
--cut--
Очевидно, что разница во флагах вызова clone. Но блин, почему? Откуда эта разница берется и как ее исправить?
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от Negative
Ответ на:
комментарий
от Negative
Ответ на:
комментарий
от Negative
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от Onanim
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Как ждать окончания процесса поражденного clone() ???? (2003)
- Форум Реализация pthread в linux (2007)
- Форум Странности с pthread (2010)
- Форум SIGKILL и «легковесные» дочки (2011)
- Форум создание дочерних процессов_ (2010)
- Форум problem in debugfs linux kernel (2009)
- Форум ffmpeg library оптимизация декодирование H.264 для встраемых систем (2015)
- Форум Пропадают строки при многопоточной записи в stdout и перенаправлении вывода (2011)
- Форум Кодирование видео с помощью libav* (2011)
- Форум Как восстановить ввод/вывод дочернего процесса? (2020)