Usage: getconf [-v specification] variable_name [pathname]
getconf
О, оказалось, это -- только под Красной Шапкой.
Под СюЗЕй man getconf отвечает, но лепит нечто очень общее...
Впрочем, вполне разбираемое.
Типа это...
root@pro-w-01:~# /lib/libc.so.6 | grep thread
linuxthreads-0.10 by Xavier Leroy
libthread_db work sponsored by Alpha Processor Inc
root@pro-w-01:~# getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.5
И как это понимать?
$ /lib/libc.so.6
<...>
Native POSIX Threads Library by Ulrich Drepper et al
<...>
$ getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.6
Так что как насчет grep Thread ;) Потому как glibc можно собрать с NPTL и linuxthreads одновременно.
Во многих современных дистрах актуальный libc.so.6 лежит в /lib/tls, а тот, который в /lib - для обратной совместимости. Вот почему надо проверять с помощью getconf GNU_LIBPTHREAD_VERSION, а не /lib/libc.so.6 | grep thread
Я имел ввиду то, что Cantor уже описал. В частности, в gentoo если собрать glibc с nptl и без linuxthreads, то будет одна /lib/libc.so.6, а если с поддержкой обоих, то используемая по умолчанию с nptl будет в /lib/tls, а с linuxthreads для fallback - в /lib. То есть на самом деле glibc просто будет собираться дважды - с nptl и linuxthreads.
зависит от ядра. двойные глибцы собирались в дистрах на ранних версиях 2.6, чтобы в случае чего, пользователь мог безболезненно откатиться на ветку 2.4
>>>актуальный libc.so.6 лежит в /lib/tls, а тот, который в /lib - для обратной совместимости
А как такое может быть, что актуальная библиотека лежит в директории про которую ldconfig ничего не знает? Я считал, что линковщик знает только про библиотеки, которые прописаны в /etc/ld.so.conf или в переменной LD_LIBRARY_PATH. Т.е. если /lib/tls в /etc/ld.so.conf не значится - то и библиотека /lib/tls/libc.so.6 не актуальная.
> зависит от ядра. двойные глибцы собирались в дистрах на ранних версиях 2.6, чтобы в случае чего, пользователь мог безболезненно откатиться на ветку 2.4
Час от часу не легче :(
Как же тогда конфликты разруливаются, если в /lib и /lib/tls одни и те же библиотеки лежат и оба пути вкомпилированы в glibc? С ld.conf как-то более менее понятно: "кто первый встал - того и тапки".
Слака вообще по-умолчанию ядра 2.4.x использует. 2.6 в ней - на любителей. Поэтому и двойной glibc - в /lib лежит библиотека для ядер 2.4 c linuxthreads , а в /lib/tls - для ядер 2.6 с ntpl.
Тогда вопрос аналогичный исходному - как узнать, в каких каталогах ldconfig ищет библиотеки? В man ldconfig на этот счёт сказано только следующее:
ldconfig creates the necessary links and cache to the most
recent shared libraries found in the directories specified
on the command line, in the file /etc/ld.so.conf, and in
the trusted directories (/lib and /usr/lib).
Да ведь дело не в том, сколько в системе ядер, глибцов и прочей хрени. Дело-то в том, какая библиотека pthread будет использована для запущенной мультитредовой программы. Рантайм-метод это и проверяет.
если мне не изменяет память то гдето в районе версии 2.4.28 в ядре была реализована возможность обеспечения одного PID для всех тредов linuxthreads одно процесса как в NTPL.
как поддерживается эта фича в libc я не знаю но ps перестал видеть кучу процессов для многотредового приложения (например java) а видит их столько сколько есть на самом деле
2cvv. Этого не может быть. Если это так, покажите release news ядра/glibc, changelog-s. Зачем вы постоянно говорите голые слова? Где факты?
В последних версиях ядра 2.4.XX может использоваться NPTL, это да (например, в RHEL3 это так). LinuxThreads никаким специальным образом с ядром не связана и всегда имеет разные PID-ы для разных тредов.
Да блин... Ядро как таковое _никакого_ отношения к NPTL не имеет! NPTL - это всего лишь отдельная библиотека, обычно идёт как часть glibc. В отличие от LinuxThreads (которая тоже всего лишь отдельная библиотека), NPTL требует некоторой поддержки от ядра, например, системный вызов tkill.
В ядре 2.6 и в последних микроверсиях 2.4 таковая поддержка появилась.
> вы б ещё сказали что LinuxThreads на форках(sys_fork) работает.
К чему эта реплика? Что вы хотите этим сказать?
Если ваши познания прихрамывают, и вы это сами сознаёте (!!), зачем вы вступаете в дискуссию, вынужная отвечать вам на ваши неверные замечания? Если прихрамывают, так почитайте что-нибудь, а потом уже что-то позволяйте себе что-либо утвержать!
справедливости ради, NPTL потребовала довольно
серьезных изменений в core kernel, и добавленные
в качестве бонуса ошибки расхлебываются по сию
пору. начать хотя бы с того, что в ядре просто
отсутсвовало такое понятие как поток во времена
LinuxThreads.
я бы даже наоборот сказал. NPTL стала создавться
после того, как изменения в ядре сделали это
возможным.