LINUX.ORG.RU

Thread


0

0

Из основного потока запускаю триаду pthread_create с PTHREAD_CREATE_DETACH В списке процессов(ps) появились 2 записи основного и триадного потока. Закрываю триаду pthread_exit(NULL или 0) В списке процессов так и остались 2 записи. Закрываю триаду exit( 0) В списке процессов остались 2 записи.Причем триадная - зомби. Вопрос:Как закрыть триаду , чтобы из спиcка процессов она исчезла.


>Как закрыть триаду

Обратись к якудзе

anonymous
()

А как получилось, что pthread_create() создаёт процесс, а не поток?

sjinks ★★★
()

Для anonymous -что делают философы на линукс форуме?

Для ananas и sjinks спасибо , что откликнулись А как получилось, что pthread_create() создаёт процесс, а не поток? Создается поток , но он регистрируется в таблице процессов. В статьях по pthread об этом упоминается, и предупреждают , что при множестве запущенных pthread_create с таблицей будет не совсем хорошо.При желании выдержки из статей и ссылки могу дать в понедельник

st_ep
() автор топика

Разобрался после того как понаставлял кучу SLEEPов. Если кому интересно - вкратце хронология: 1. запустили программу ./b PID TTY STAT TIME COMMAND 531 p1 S 0:00 ./b

2. основной поток создал 2 триады pthread_create PID TTY STAT TIME COMMAND 531 p1 S 0:00 ./b 533 p1 S 0:00 ./b 534 p1 S 0:00 ./b 535 p1 S 0:00 ./b

3. обе триады самоликвидировались через pthread_exit или return PID TTY STAT TIME COMMAND 531 p1 S 0:00 ./b 533 p1 S 0:00 ./b

4. опять вызвали из основного phread_create PID TTY STAT TIME COMMAND 531 p1 S 0:00 ./b 533 p1 S 0:00 ./b 538 p1 S 0:00 ./b 539 p1 S 0:00 ./b 5. опять они закрылись. PID TTY STAT TIME COMMAND 531 p1 S 0:00 ./b 533 p1 S 0:00 ./b Вот эту вторую запись я и принял за не закрытый поток.Каюсь,бестолковый. Был бы признателен , если кто-то пояснит почему после thread_create в таблице 2 записи даже если там только остается основной поток.Если интересно, приведу код- строчек 30

st_ep
() автор топика
Ответ на: комментарий от st_ep

Так было давно, раньше, в 2.4.x было, что в ядре существовал syscall clone(), который позволял создовать процессы с общей памятью. Именно процессы, а не потоки. И библиотека делала видимость потоков на основании этого вызова. При этом при первом вызове pthread_create() сразу создовался ещё один процесс/поток, который управлял (эмулировал) pthread_exit и т.д.

Сейчас уже давно есть полноценные потоки, погуглите на эту тему.

mky ★★★★★
()

mky Спасибо. А чуял, что собака в RH 5.1 2.0.34

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