Scroll to navigation

personality(2) System Calls Manual personality(2)

ИМЯ

personality - задаёт домен исполнения процесса

LIBRARY

Standard C library (libc, -lc)

СИНТАКСИС

#include <sys/personality.h>
int personality(unsigned long persona);

ОПИСАНИЕ

Linux поддерживает несколько видов доменов исполнения процессов или специализаций (personalities) для каждого процесса. Среди прочего, домены исполнения указывают Linux как связывать номера сигналов с обработчиками сигналов. Система доменов исполнения позволяет Linux частично поддерживать программы, собранные в других ОС, подобных UNIX.

Если значение persona не равно 0xffffffff, то personality() установит домен исполнения вызывающего равным значению persona. Если значение persona равно 0xffffffff, то возвращается текущую специализацию (persona) не изменяя её.

Список доступных доменов исполнения можно найти в <sys/personality.h>. Домен исполнения — это 32-битное значение, в котором верхние три байта отведены под флаги, заставляющие ядро изменить поведение определённых системных вызов, чтобы они эмулировали устаревшие или архитектурные особенности. Младший байт содержит значение, определяющее специализацию, которую должно предполагать ядро. Значения флагов:

При указании этого флага предоставляется устаревшая раскладка виртуального адресного пространства.
При указании этого флага отключается случайное расположение виртуального адресного пространства.
Ограничивает адресное пространство 32 битами.
При указании этого флага значение 0xc0000000 используется как смещение, по которому ищется блок (chunk) виртуальной памяти в mmap(2); в противном случае используется 0xffffe000.
Указатели на функции пользовательского пространства для сигнальных обработчиков указывают (на определённых архитектурах) на дескрипторы.
Отображать страницу 0 только для чтения (для поддержки двоичных файлов, зависящих от такого поведения согласно SVr4).
При указании этого флага операция PROT_READ в mmap(2) подразумевает и PROT_EXEC.
Никак не влияет(?).
При указании этого флага вызовы select(2), pselect(2) и ppoll(2) не изменяют возвращаемый аргумент ожидания, если их работа прерывается обработчиком сигнала.
Have uname(2) report a 2.6.40+ version number rather than a 3.x version number. Added as a stopgap measure to support broken applications that could not handle the kernel version-numbering switch from Linux 2.6.x to Linux 3.x.
Никак не влияет.

Список доступных доменов исполнения:

BSD. (Никак не влияет)
Поддержка 32-битного HP/UX. Никогда не была полной и удалена начиная с Linux 4.0, данное значение никак не влияет на работу.
Поддержка 32-битного IRIX 5. Никогда полностью не работала; удалена в Linux 2.6.27. Подразумевает STICKY_TIMEOUTS.
IRIX 6, 64-битная версия. Подразумевает STICKY_TIMEOUTS; в противном случае никак не влияет.
IRIX 6, новая 32-битная версия. Подразумевает STICKY_TIMEOUTS; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS; в противном случае никак не влияет.
Linux.
[Будет описано.]
Подразумевает ADDR_LIMIT_3GB.
Подразумевает ADDR_LIMIT_32BIT.
Подразумевает FDPIC_FUNCPTRS.
OSF/1 v4. На alpha, очищает верхние 32 бита iov_len в пользовательском буфере для совместимости со старыми версиями OSF/1, где iov_len определено как int.
Подразумевает STICKY_TIMEOUTS и WHOLE_SECONDS; в противном случае никак не влияет.
[Будет описано.]
Подразумевает STICKY_TIMEOUTS, WHOLE_SECONDS и SHORT_INODE; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS. Библиотека отклонений и динамический компоновщик ищутся в /usr/gnemul. Содержит ошибки, практически не сопровождается и почти никем не используется; поддержка была удалена в Linux 2.6.26.
Подразумевает STICKY_TIMEOUTS и SHORT_INODE; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS и MMAP_PAGE_ZERO; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS и MMAP_PAGE_ZERO; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS и SHORT_INODE; в противном случае никак не влияет.
Подразумевает STICKY_TIMEOUTS и SHORT_INODE; в противном случае никак не влияет.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, the previous persona is returned. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

Ядру не удалось изменить специализацию.

ВЕРСИИ

Данный системный вызов впервые появился в Linux 1.1.20 (и, таким образом, в первом стабильном выпуске ядра Linux 1.2.0); поддержка в glibc добавлена в версии 2.3.

СТАНДАРТЫ

Вызов personality() есть только в Linux, и он не должен использоваться в переносимых программах.

СМ. ТАКЖЕ

setarch(8)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Kogan, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

4 декабря 2022 г. Linux man-pages 6.03