personality - richtet die Prozess-Ausführungsumgebung
ein
Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT
#include <sys/personality.h>
int personality(unsigned long Rolle);
Linux unterstützt für jeden Prozess verschiedene
Prozess-Ausführungsumgebungen oder Personalitäten. Unter
anderem mit den Prozess-Ausführungsumgebungen bestimmt der Kernel,
wie er Signalnummern in Signale umsetzen soll. Dieses System
ermöglicht Linux teilweise, für andere UNIX-artige Systeme
kompilierte Programme direkt laufen zu lassen.
Falls Rolle nicht 0xffffffff ist, setzt
personality() die Ausführungsumgebung des Aufrufenden auf den
durch Rolle angegebenen Wert. Wird Rolle als 0xffffffff
angegeben, kann die aktuelle Rolle ermittelt werden, ohne sie zu
ändern.
Eine Liste der verfügbaren Ausführungsumgebungen
kann in <sys/personality.h> gefunden werden. Die
Ausführungsumgebung ist ein 32-Bit-Wert, in der die oberen drei Byte
für Schalter, die den Kernel zur Veränderung bestimmter
Systemaufrufe bewegen, bereitgestellt werden, damit historische oder
architekturale Besonderheiten emuliert werden. Das unterste Byte ist ein
Wert, der die Personalität definiert, die der Kernel annehmen sollte.
Die Schalterwerte sind wie folgt:
- ADDR_COMPAT_LAYOUT
(seit Linux 2.6.9)
- Ist dieser Schalter gesetzt, wird das veraltete virtuelle
Arbeitspeicherlayout bereitgestellt.
- ADDR_NO_RANDOMIZE
(seit Linux 2.6.12)
- Ist dieser Schalter gesetzt, wird Adressspeicherlayoutverwürfelung
deaktiviert.
- ADDR_LIMIT_32BIT
(seit Linux 2.2)
- Begrenzt den Adressraum auf 32-Bit.
- ADDR_LIMIT_3GB
(seit Linux 2.4.0)
- Ist dieser Schalter gesetzt, wird 0xc0000000 als Versatz verwendet, ab dem
nach einem Datenblock virtuellen Speichers von mmap(2) gesucht
wird, andernfalls wird 0xffffe000 benutzt. Nur bei 32-bit-Prozessen auf
x86.
- FDPIC_FUNCPTRS
(seit Linux 2.6.11)
- Funktionszeiger im Benutzeradressraum auf Signalbehandlungsroutinen zeigen
(auf bestimmten Architekturen) auf Deskriptoren. Nur auf ARM mit
BINFMT_ELF_FDPIC und SuperH.
- MMAP_PAGE_ZERO
(seit Linux 2.4.0)
- Mappt Seite 0 als nur-lesbar (um Programme zu unterstützen, die von
diesem SVr4-Verhalten abhängen).
- READ_IMPLIES_EXEC
(seit Linux 2.6.8)
- Wird dieser Schalter gesetzt, impliziert PROT_READ PROT_EXEC
für mmap(2).
- SHORT_INODE
(seit Linux 2.4.0)
- Kein Effekt.
- STICKY_TIMEOUTS
(seit Linux 1.2.0)
- Ist dieser Schalter gesetzt, werden select(2), pselect(2)
und ppoll(2) das zurückgegebene
Zeitüberschreitungsargument nicht ändern, wenn sie durch
eine Signalbehandlungsroutine unterbrochen werden.
- UNAME26 (seit
Linux 3.1)
- Lässt uname(2) eine Versionsnummer von 2.6.(40+x) statt
MAJOR.x melden. Wurde als Überbrückung hinzugefügt,
um Anwendungen zu unterstützen, die mit der
Versionsnummernumstellung von Linux 2.6.x auf 3.x nicht umgehen
konnten.
- WHOLE_SECONDS
(seit Linux 1.2.0)
- Kein Effekt.
Die verfügbaren Ausführungsumgebungen sind:
- PER_BSD (seit
Linux 1.2.0)
- BSD. (Kein Effekt)
- PER_HPUX (seit
Linux 2.4)
- Unterstützung für 32-Bit HP/UX. Diese Unterstützung
war nie vollständig und wurde entfernt, so dass seit Linux 4.0
dieser Wert keinen Effekt hat.
- PER_IRIX32
(seit Linux 2.2)
- IRIX 5 32-Bit. Funktionierte nie, die Unterstützung wurde in Linux
2.6.27 entfernt. Impliziert STICKY_TIMEOUTS.
- PER_IRIX64
(seit Linux 2.2)
- IRIX 6 64-Bit. Impliziert STICKY_TIMEOUTS; ansonsten kein
Effekt.
- PER_IRIXN32
(seit Linux 2.2)
- IRIX 6 new 32-bit. Impliziert STICKY_TIMEOUTS; ansonsten kein
Effekt.
- PER_ISCR4
(seit Linux 1.2.0)
- Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
- PER_LINUX
(seit Linux 1.2.0)
- Linux.
- PER_LINUX32
(seit Linux 2.2)
- uname(2) liefert den Namen der 32-bit-Architektur im Feld
machine zurück (»i686« anstatt
»x86_64«, &c.).
- Unter ia64 (Itanium) wird bei Prozessen mit dieser
Ausführungsumgebung der Schalter O_LARGEFILE von open(2)
nicht erzwungen.
- Unter 64-bit-ARM-Architekturen ist das Setzen dieser
Prozess-Ausführungsumgebung verboten, falls das
execve(2)-ieren eines 32-bit-Prozesses ebenfalls verboten ist
(siehe den Kernelparameter allow_mismatched_32bit_el0 und
Documentation/arm64/asymmetric-32bit.rst).
- PER_LINUX32_3GB
(seit Linux 2.4)
- Wie PER_LINUX32, aber impliziert ADDR_LIMIT_3GB.
- PER_LINUX_32BIT
(seit Linux 2.0)
- Wie PER_LINUX, aber impliziert ADDR_LIMIT_32BIT.
- PER_LINUX_FDPIC
(seit Linux 2.6.11)
- Wie PER_LINUX, aber impliziert FDPIC_FUNCPTRS.
- PER_OSF4 (seit
Linux 2.4)
- OSF/1 v4. Kein Effekt seit Linux 6.1, wo die Unterstützung
für a.out-Programme entfernt wurde. Davor würden unter Alpha
die oberen 32 bit von iov_len im Puffer des Benutzer zurückgesetzt,
um kompatibel zu alten Versionen von OSF/1 zu sein, bei denen iov_len als
int definiert war.
- PER_OSR5 (seit
Linux 2.4)
- SCO OpenServer 5. Impliziert STICKY_TIMEOUTS und
WHOLE_SECONDS; ansonsten kein Effekt.
- PER_RISCOS
(seit Linux 2.3.7; Makro seit Linux 2.3.13)
- Acorn RISC OS/Arthur (MIPS). Kein Effekt. Bis zu Linux v4.0 wurde die
Emulation-Altroot auf /usr/gnemul/riscos gesetzt (siehe
PER_SUNOS nachfolgend). Davor, bis zu Linux 2.6.3, nur
Arthur-Emulation.
- PER_SCOSVR3
(seit Linux 1.2.0)
- SCO UNIX System V Release 3. Wie PER_OSR5, impliziert aber auch
SHORT_INODE.
- PER_SOLARIS
(seit Linux 2.4)
- Solaris. Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
- PER_SUNOS
(seit Linux 2.4.0)
- Sun OS. Wie PER_BSD, aber impliziert STICKY_TIMEOUTS. Vor
Linux 2.6.26 wurden Bibliotheks- und dynamische Linker-Suchen nach
/usr/gnemul umgelenkt. Fehlerhaft, größtenteils nicht
betreut und fast komplett unbenutzt.
- PER_SVR3 (seit
Linux 1.2.0)
- AT&T UNIX System V Release 3. Impliziert STICKY_TIMEOUTS und
SHORT_INODE; ansonsten kein Effekt.
- PER_SVR4 (seit
Linux 1.2.0)
- AT&T UNIX System V Release 4. Impliziert STICKY_TIMEOUTS und
MMAP_PAGE_ZERO; ansonsten kein Effekt.
- PER_UW7 (seit
Linux 2.4)
- UnixWare 7. Impliziert STICKY_TIMEOUTS und MMAP_PAGE_ZERO;
ansonsten kein Effekt.
- PER_WYSEV386
(seit Linux 1.2.0)
- WYSE UNIX System V/386. Impliziert STICKY_TIMEOUTS und
SHORT_INODE; ansonsten kein Effekt.
- PER_XENIX
(seit Linux 1.2.0)
- XENIX. Impliziert STICKY_TIMEOUTS und SHORT_INODE; ansonsten
kein Effekt.
Bei Erfolg wird die frühere Rolle
zurückgegeben. Tritt ein Fehler auf, ist der Rückgabewert -1
und errno wird gesetzt, um den Fehler anzuzeigen.
- EINVAL
- Der Kernel konnte die Prozess-Ausführungsumgebung nicht
ändern.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Hanno Wagner <wagner@bidnix.bid.fh-hannover.de>, Martin Eberhard
Schauer <Martin.E.Schauer@gmx.de>, Chris Leick
<c.leick@vollbio.de>, Mario Blättermann
<mario.blaettermann@gmail.com> und Helge Kreutzmann
<debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die Mailingliste der
Übersetzer:
debian-l10n-german@lists.debian.org.