2013-11-27 5 views
1

Вопрос: инициализированы объекты pthread_mutex_t kernel persistent? - проблема для Linux V 2.6.Являются ли инициализированные ядра pthread_mutex_t постоянными?

Мотивация: Если постоянный: объекты ресурсы не будут выпускаться с конкретной очисткой, pthread_mutex_destroy

В практическом плане кодирования это означает, что объект мьютекса будет сохраняться после созданием выхода из программы или не прерывается без очистки, если pthread_mutex_destroy называется. У меня есть код, который обычно удаляется с помощью отвратительной управляющей программы, , которая использует kill -9, SIGKILL, после попытки kill -15 (SIGTERM). Дизайн программы не изменится, это код поставщика. Нет никакого способа, чтобы изменить его базовое поведение. Правильная очистка кода часто занимает больше времени, чем нравится демона управления , поэтому «zap» выполняет этот процесс. Это происходит часто.

https://www.kernel.org/doc/Documentation/mutex-design.txt От Инго Молнар

[это старше материал, который говорит «да», Спин-блокировки режима ядра объекта]

'структура мьютекса это новый тип взаимной блокировки, определенные в включают/Linux /mutex.h и реализованы в kernel/locking/mutex.c. Это мьютекс на основе счетчика с спин-блокировкой и списком ожидания. Счетчик имеет 3 состояния: 1 для «разблокировано», 0 для «заблокировано» и отрицательные числа (обычно -1) для «заблокированных, потенциальных официантов в очереди».

http://man7.org/linux/man-pages/man2/execve.2.html имеет:

  • Все, кроме вызывающего потока нити разрушаются во время execve(). Мьютексы, переменные условия и другие pthreads объекты не сохраняются.

Таким образом, при вызове одного из exec() семейство не является способом определения стойкости.

http://man7.org/linux/man-pages/man3/exit.3.html ничего не сказал о мьютексе один так или иначе.

Может ли кто-нибудь указать мне окончательный код или документацию так или иначе? Мне нужно противостоять нашему поставщику чем-то прочным.

+2

Задайте себе вопрос: может ли какая-либо проблема, которую вы предполагаете, использовать двенадцатилетним ребенком, чтобы написать тривиальную атаку DOS на сервер Linux? Если это так, то проблема, вероятно, не существует. –

+0

Да, но продавцу 11 лет. (юмор). Если то, что вы говорите, истинно, тогда покажите мне все, о чем я прошу. –

+1

Документация mutex, которую вы ищете, предназначена для внутреннего использования ядра (между компонентами ядра и модулями). Это не имеет никакого отношения к мьютексам pthread. Это может быть источником вашей путаницы. –

ответ

2

Мьютексы Pthreads в Linux не являются объектами ядра. pthread_mutex_destroy не выполняет никаких системных вызовов, потому что нет бесплатного ресурса ядра. strace это и убедитесь сами.

Связанный документ Ingo Molnar рассказывает о мьютексах, которые являются внутренними для ядра Linux, а не о pthreads. Это совершенно разные звери.

+0

FYI, здесь вы можете видеть, что 'pthread_mutex_destroy' по существу не работает: https://sourceware.org/git/?p=glibc.git;a=blob;f=nptl/pthread_mutex_destroy.c ; h = d2c492fcb780db1dc874b3cc40a982ef66317bbd; hb = HEAD –

+0

@nm Это, как и ссылка, является тем, что было необходимо. –

Смежные вопросы