Scroll to navigation

personality(2) System Calls Manual personality(2)

BEZEICHNUNG

personality - richtet die Prozess-Ausführungsumgebung ein

BIBLIOTHEK

Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

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

BESCHREIBUNG

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:

Ist dieser Schalter gesetzt, wird das veraltete virtuelle Arbeitspeicherlayout bereitgestellt.
Ist dieser Schalter gesetzt, wird Adressspeicherlayoutverwürfelung deaktiviert.
Begrenzt den Adressraum auf 32-Bit.
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.
Funktionszeiger im Benutzeradressraum auf Signalbehandlungsroutinen zeigen (auf bestimmten Architekturen) auf Deskriptoren. Nur auf ARM mit BINFMT_ELF_FDPIC und SuperH.
Mappt Seite 0 als nur-lesbar (um Programme zu unterstützen, die von diesem SVr4-Verhalten abhängen).
Wird dieser Schalter gesetzt, impliziert PROT_READ PROT_EXEC für mmap(2).
Kein Effekt.
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.
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.
Kein Effekt.

Die verfügbaren Ausführungsumgebungen sind:

BSD. (Kein Effekt)
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.
IRIX 5 32-Bit. Funktionierte nie, die Unterstützung wurde in Linux 2.6.27 entfernt. Impliziert STICKY_TIMEOUTS.
IRIX 6 64-Bit. Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
IRIX 6 new 32-bit. Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
Linux.
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).
Wie PER_LINUX32, aber impliziert ADDR_LIMIT_3GB.
Wie PER_LINUX, aber impliziert ADDR_LIMIT_32BIT.
Wie PER_LINUX, aber impliziert FDPIC_FUNCPTRS.
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.
SCO OpenServer 5. Impliziert STICKY_TIMEOUTS und WHOLE_SECONDS; ansonsten kein Effekt.
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.
SCO UNIX System V Release 3. Wie PER_OSR5, impliziert aber auch SHORT_INODE.
Solaris. Impliziert STICKY_TIMEOUTS; ansonsten kein Effekt.
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.
AT&T UNIX System V Release 3. Impliziert STICKY_TIMEOUTS und SHORT_INODE; ansonsten kein Effekt.
AT&T UNIX System V Release 4. Impliziert STICKY_TIMEOUTS und MMAP_PAGE_ZERO; ansonsten kein Effekt.
UnixWare 7. Impliziert STICKY_TIMEOUTS und MMAP_PAGE_ZERO; ansonsten kein Effekt.
WYSE UNIX System V/386. Impliziert STICKY_TIMEOUTS und SHORT_INODE; ansonsten kein Effekt.
XENIX. Impliziert STICKY_TIMEOUTS und SHORT_INODE; ansonsten kein Effekt.

RÜCKGABEWERT

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.

FEHLER

Der Kernel konnte die Prozess-Ausführungsumgebung nicht ändern.

STANDARDS

Linux.

GESCHICHTE

Linux 1.1.20, Glibc 2.3.

SIEHE AUCH

setarch(8)

Ü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.

2. Mai 2024 Linux man-pages (unveröffentlicht)