proc(4) proc(4)
NAME
proc - Prozeßdateisystem /proc
BESCHREIBUNG
/proc ist ein Dateisystem, das den Zugriff auf das Abbild jedes akti-
ven Prozesses im System ermöglicht. Beim Namen jedes Eintrags im Ver-
zeichnis /proc handelt es sich um eine Dezimalzahl, die für die Pro-
zeßnummer steht. Der Eigentümer jeder Datei wird anhand der Benutzer-
nummer des Prozesses ermittelt.
Der Zugriff auf die Dateien in /proc erfolgt über die Standard-System-
aufrufe open, close, read, write und ioctl. Wird eine Datei zum Lesen
und Schreiben geöffnet, wird die Prozeßsteuerung aktiviert. Wird eine
Datei nur zum Lesen geöffnet, kann sie lediglich durchsucht werden;
die Prozeßsteuerung wird dann nicht aktiviert. Ebenso wie gewöhnliche
Dateien kann auch ein und dieselbe Datei in /proc durch zwei oder mehr
Prozesse gleichzeitig geöffnet werden. Um Konflikte zwischen Steue-
rungsprozessen zu vermeiden, kann beim Öffnen einer Datei das Flag
OEXCL ("Exclusive Open") angegeben werden; ist eine Datei mit dem
open-Aufruf zum Schreiben geöffnet worden, schlägt der Versuch, die
Datei mit dem Flag OEXCL zum Schreiben zu öffnen, fehl (der entspre-
chende open-Aufruf wird abgebrochen). Die Datei kann dann erst wieder
zum Schreiben geöffnet werden, nachdem ihr Dateideskriptor geschlossen
worden ist - dies gilt unabhängig davon, ob beim open-Systemaufruf das
Flag OEXCL angegeben wird oder nicht (Ausnahme: Der Systemverwalter
kann selbst eine bereits im Exklusiv-Modus geöffnete Datei erneut öff-
nen, wenn er nicht das Flag OEXCL angibt). Zum Lesen dagegen kann
eine Datei beliebig oft geöffnet werden - dies gilt selbst dann, wenn
die Datei mit dem Flag OEXCL zum Schreiben geöffnet worden ist.
Die Daten können von bzw. zu jeder Position im Adreßraum eines überwach-
ten Prozesses übertragen werden. Hierzu wird der Dateizeiger mit Hilfe
von lseek auf die betreffende virtuelle Adresse positioniert und dann
read oder write aufgerufen. Über die Operation PIOCMAP können die Berei-
che des Adreßraums ermittelt werden, auf die zugegriffen werden kann
(die sogenannten Mappings). Ein zusammenhängender Bereich des Adreßraums
kann aufgrund der unterschiedlichen Lese-/Schreib-/Ausführungsberechti-
gungen mehrere Mappings haben. E/A-Operationen können sich auf zusammen-
hängende Mappings beziehen. Eine E/A-Anforderung auf einen nicht abge-
bildeten Bereich wird an der Grenze des Speicherbereichs abgeblockt.
Die Erzeugung von Informationen über die Prozesse sowie die Steuerung
der Prozesse erfolgt mit dem ioctl-Systemaufruf. Dazu wird folgendes
Format benutzt:
#include <sys/types.h>
#include <sys/signal.h>
#include <sys/fault.h>
#include <sys/syscall.h>
#include <sys/procfs.h>
void *p;
retval = ioctl(fildes, code, p);
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
Das Argument p ist ein generischer Zeiger, dessen Typ vom betreffenden
ioctl-Code abhängt. Sofern nachfolgend nichts anderes angegeben wird,
sollte es den Wert Null haben. <sys/procfs.h> enthält die Definitionen
der ioctl-Codes und Datenstrukturen, die bei den Operationen verwendet
werden. Eine Reihe von Operationen kann nur auf eine Prozeßdatei aus-
geführt werden, die zum Schreiben geöffnet worden ist; hierzu gehören
alle Operationen, die sich auf die Prozeßsteuerung auswirken.
Zur Erzeugung von Informationen über die Prozesse und die Steuerung
der Prozesse werden Gruppen von Flags benutzt. Die Flags in den Grup-
pen vom Typ sigsett, fltsett und syssett entsprechen den Signal-,
Fehler- bzw. Systemaufruf-Auflistungen in <sys/signal.h>,
<sys/fault.h> bzw. <sys/syscall.h>. Die einzelnen Gruppen (sets) sind
zwar (wegen der unterschiedlichen Anzahl der Einträge in den Aufli-
stungen) unterschiedlich groß, haben aber eine einheitliche Struktur
und können durch die folgenden Makros manipuliert werden:
prfillset(&set); /* Sämtliche Flags in set aktivieren */
premptyset(&set); /* Sämtliche Flags in set deaktivieren */
praddset(&set, flag); /* Angegebenes Flag aktivieren */
prdelset(&set, flag); /* Angegebenes Flag deaktivieren */
r = prismember(&set, flag); /* != 0, wenn Flag aktiviert */
Bevor set in einer anderen Operation benutzt werden kann, muß es ent-
weder mit prfillset oder mit premptyset initialisiert werden. flag muß
in der Auflistung enthalten sein, der set zugeordnet ist.
Nachfolgend sind die zulässigen ioctl-Funktionsaufrufe aufgeführt. Die
Funktionsaufrufe, für die die Schreibberechtigung notwendig ist, sind
mit einem Stern (*) gekennzeichnet. Sofern nicht anders angegeben,
führt ein ioctl-Funktionsaufruf für einen beendeten Prozeß zum Fehler
ENOENT.
PIOCSTATUS
Hiermit werden Statusinformationen für den Prozeß zurückgegeben; p ist
ein Zeiger auf eine prstatus-Struktur:
typedef struct prstatus
{
long prflags; /* Prozeß-Flags */
short prwhy; /* Grund für Anhalten des Prozesses
(falls angehalten) */
short prwhat; /* Ausführlichere Begründung */
struct siginfo prinfo; /* Info zu Signal bzw. Fehlermeldung */
short prcursig; /* Aktuelles Signal */
sigsett prsigpend; /* Weitere anstehende Signale */
sigsett prsighold; /* Blockierte Signale */
struct sigaltstack praltstack; /* Info über Alternativ-Signal-Stack */
struct sigaction praction; /* Signal-Aktion für aktuelles Signal */
pidt prpid; /* Prozeßnummer */
pidt prppid; /* Nummer des Vaterprozesses */
pidt prpgrp; /* Gruppennummer des Prozesses */
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
pidt prsid; /* Sitzungsnummer */
timestruct prutime; /* Zeit des Prozesses im Benutzer-Modus */
timestruct prstime; /* Zeit des Prozesses im System-Modus */
timestruct prcutime; /* Kumulierte Zeit der Sohnprozesse
im Benutzer-Modus */
timestruct prcstime; /* Kumulierte Zeit der Sohnprozesse
im System-Modus */
char prclname[8]; /* Name der Scheduling-Klasse */
long prfiller[20]; /* Derzeit nicht benutzt */
long prinstr; /* Aktuelle Anweisung */
gregsett prreg; /* Allgemeine Register */
} prstatust;
prflags ist eine Bitmaske mit folgenden Flags:
PRSTOPPED Der Prozeß wird angehalten.
PRISTOP Der Prozeß wird wegen eines bedeutsamen Ereignisses
angehalten (siehe PIOCSTOP).
PRDSTOP Für den Prozeß ist gerade eine Stop-Direktive aktiv
(siehe PIOCSTOP).
PRASLEEP Der Prozeß ist bei einem Systemaufruf in einem Wartezu-
stand, der nicht unterbrochen werden kann.
PRFORK Für den Prozeß ist das Inherit-on-fork-Flag gesetzt
(siehe PIOCSFORK)
PRRLC Für den Prozeß ist das Run-on-last-close-Flag gesetzt
(siehe PIOCSRLC).
PRPTRACE Der Prozeß wird mit ptrace überwacht.
PRPCINVAL Der Programmzähler des Prozesses bezieht sich auf eine
ungültige Adresse.
PRISSYS Bei diesem Prozeß handelt es sich um einen Systemprozeß
(siehe PIOCSTOP).
Mit der Kombination aus prwhy und prwhat wird der Grund für das
Anhalten eines Prozesses beschrieben. prwhy kann folgende Werte
annehmen:
- PRREQUESTED bedeutet, daß der Prozeß durch einen PIOCSTOP-Funk-
tionsaufruf angehalten wurde; prwhat wird in diesem Fall nicht
benutzt.
- PRSIGNALLED bedeutet, daß der Prozeß beim Empfang eines Signals
angehalten wurde (siehe PIOCSTRACE); prwhat enthält die Nummer des
Signals, das zum Anhalten führte (bei einem erst vor kurzem ange-
haltenen Prozeß ist derselbe Wert in prcursig enthalten).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
- PRFAULTED bedeutet, daß der Prozeß wegen eines Hardware-Fehlers
angehalten wurde (siehe PIOCSFAULT); prwhat enthält die Nummer des
Fehlers, der zum Anhalten führte.
- PRSYSENTRY und PRSYSEXIT bedeuten, daß der Prozeß bei der Akti-
vierung bzw. Beendigung eines Systemaufrufs angehalten wurde (siehe
PIOCSENTRY und PIOCSEXIT); prwhat enthält die Nummer des System-
aufrufs.
- PRJOBCONTROL bedeutet, daß der Prozeß wegen der Standard-Aktion
eines Auftragssteuerungs-Stopsignals angehalten wurde [siehe
sigaction(2)]; prwhat enthält die Nummer des Signals, das zum
Anhalten führte.
Wenn der Prozeß wegen einer PRSIGNALLED- oder PRFAULTED-Bedingung
angehalten wurde, enthält prinfo zusätzliche Informationen in bezug
auf das betreffende Signal bzw. auf den betreffenden Fehler (siehe
<sys/siginfo.h>).
prcursig enthält das aktuelle Signal, also das Signal, das als näch-
stes an den Prozeß übermittelt werden soll. prsigpend gibt weitere
anstehende Signale an. prsighold enthält diejenigen Signale, deren
Übermittlung an den Prozeß gegebenenfalls verzögert wird.
praltstack enthält die Informationen für den Ausweich-Signal-Stack
des Prozesses [siehe sigaltstack(2)]. praction enthält die Informa-
tionen über die Signal-Aktion in bezug auf das aktuelle Signal [siehe
sigaction(2)]; dieses Flag ist nicht definiert, wenn prcursig den
Wert Null enthält.
prpid, prppid, prpgrp und prsid enthalten die Prozeßnummer, die
Nummer des Vaterprozesses, die Prozeßgruppennummer bzw. die Sitzungs-
nummer des Prozesses.
prutime, prstime, prcutime und prcstime enthalten die vom Prozeß
verbrauchte Rechenzeit im Benutzer- und Systemmodus bzw. die Summe aus
der von seinen Sohnprozessen verbrauchten Rechenzeiten im Benutzer-
und Systemmodus; die Ausgabe erfolgt in Sekunden und Nanosekunden.
prclname enthält den Namen der Scheduling-Klasse des Prozesses.
Der Bereich prfiller ist derzeit noch nicht belegt.
prinstr enthält den Maschinenbefehl, auf den sich der Programmzähler
bezieht. Die Menge der vom Prozeß geladenen Daten ist rechnerabhängig.
Auf einem Rechner vom Typ 3B2 beträgt sie ein einziges Byte. Die
Datenmenge entspricht im allgemeinen der Größe des kleinsten Befehls
des jeweiligen Rechners. Wenn der Programmzähler auf eine ungültige
Adresse Bezug nimmt, wird PRPCINVAL gesetzt; prinstr bleibt dann
undefiniert.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
prreg ist ein Array mit dem Inhalt der allgemeinen Register. Auf
einem Rechner vom Typ 3B2 können die vordefinierten Konstanten RR0,
RR1, ... RR8, RFP, RAP, RPS, RSP und RPC als Indizes benutzt
werden, mit denen auf die entsprechenden Register Bezug genommen wird.
PIOCSTOP, PIOCWSTOP
PIOCSTOP weist den Prozeß an anzuhalten und wartet darauf; PIOCWSTOP
wartet einfach auf ein Anhalten des Prozesses. Diese Operationen sind
beendet, sobald der Prozeß wegen eines bedeutsamen Ereignisses ange-
halten wird; wenn der Prozeß bereits angehalten ist, werden sie sofort
beendet. Wenn p einen Wert ungleich Null enthält, zeigt es auf ein
Vorkommen von prstatust, das mit Statusinformationen für den angehal-
tenen Prozeß gefüllt werden soll.
Ein "bedeutsames Ereignis" ist entweder ein Anhalten aufgrund einer
PRREQUESTED-Bedingung oder wenn ein Prozeß durch seine Tracing-Flags
(die durch PIOCSTRACE, PIOCSFAULT, PIOCSENTRY und PIOCSEXIT gesetzt
werden) angehalten worden ist. Wenn ein Prozeß aufgrund einer
PRJOBCONTROL-Bedingung angehalten wird, ist dies kein bedeutsames
Ereignis (ein Prozeß kann zweimal aufgrund eines Stop-Signals angehal-
ten werden; beim ersten Mal wird PRSIGNALLED angezeigt, wenn das Sig-
nal überwacht wird, beim zweiten Mal erneut PRJOBCONTROL, wenn der
Prozeß ohne Zurücksetzen des Signals aktiviert wird). Wenn der Prozeß
durch ptrace gesteuert wird, wird er beim Empfang eines beliebigen
Signals durch PRSIGNALLED angehalten; dabei handelt es sich nur dann
um ein bedeutsames Ereignis, wenn das Signal in der Gruppe der über-
wachten Signale enthalten ist. Wenn PIOCSTOP auf einen bereits (nicht
wegen eines bedeutsamen Ereignisses) angehaltenen Prozeß angewandt
wird, tritt die Stop-Direktive in Aktion, sobald der Prozeß durch den
konkurrierenden Mechanismus neu gestartet wird; zu diesem Zeitpunkt
wird der Prozeß durch PRREQUESTED angehalten, bevor ein Benutzer-Code
ausgeführt wird.
ioctl-Funktionsaufrufe können durch Signale unterbrochen werden; damit
kann z. B. mit Hilfe eines alarm(2)s verhindert werden, daß unendlich
lange auf einen Prozeß gewartet wird, der möglicherweise niemals wegen
eines bedeutsamen Ereignisses angehalten wird. Wenn PIOCSTOP unterbro-
chen wird, bleibt die Stop-Direktive wirksam, auch wenn der ioctl-
Funktionsaufruf einen Fehler zurückgibt.
Ein Systemprozeß (für den das PRISSYS-Flag gesetzt ist) wird in kei-
nem Fall auf Benutzerebene ausgeführt; außerdem hat er keinen Adreß-
raum auf Benutzerebene, der über /proc sichtbar gemacht werden kann,
und er kann nicht angehalten werden. Der Aufruf von PIOCSTOP oder
PIOCWSTOP für einen Prozeß führt zum Fehler EBUSY.
PIOCRUN*
Der überwachte Prozeß wird nach dem Anhalten erneut lauffähig gemacht.
Wenn p einen Wert ungleich Null hat, zeigt er auf eine prrun-Struktur,
die zusätzlich auszuführende Aktionen beschreibt:
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
typedef struct prrun
{
long prflags; /* Flags */
sigsett prtrace; /* Signale, die überwacht werden sollen */
sigsett prsighold; /* Signale, die blockiert werden sollen */
fltsett prfault; /* Fehler, die protokolliert werden sollen */
caddrt prvaddr; /* Virtuelle Start-Adresse */
long prfiller[8]; /* Derzeit unbenutzt */
} prrunt;
prflags ist eine Bit-Maske zur Beschreibung von optionalen Aktionen;
die übrigen Einträge haben nur dann eine Bedeutung, wenn die entspre-
chenden Bits in prflags gesetzt sind. prfiller ist derzeit noch
nicht belegt; dieser Bereich muß durch das Benutzer-Programm mit Nul-
len gefüllt werden. Die Flags haben folgende Funktion:
- PRCSIG setzt das aktuelle Signal gegebenenfalls zurück (siehe
PIOCSSIG).
- PRCFAULT löscht gegebenenfalls den aktuellen Fehler (siehe
PIOCCFAULT).
- PRSTRACE setzt die Gruppe der überwachten Signale auf prtrace
(siehe PIOCSTRACE).
- PRSHOLD setzt die Gruppe der blockierten Signale auf prsighold
(siehe PIOCSHOLD).
- PRSFAULT die Gruppe der protokollierten Fehler auf prfault (siehe
PIOCSFAULT).
- PRSVADDR setzt die Adresse, an der die Ausführung fortgesetzt wer-
den soll, auf prvaddr.
- PRSTEP weist den Prozeß zur Ausführung eines einzelnen Schritts an,
nämlich zum Starten und Ausführen eines einzigen Maschinenbefehls.
Bei der Beendigung des Maschinenbefehls wird ein hardware-abhängiger
Trace-Trap erzeugt. Wenn FLTTRACE überwacht wird, wird der Prozeß
beendet; andernfalls wird ihm das Signal SIGTRAP übermittelt. Wenn
SIGTRAP überwacht und nicht blockiert wird, wird der Prozeß angehal-
ten. Diese Operation muß von der Hardware unterstützt werden; sie ist
möglicherweise nicht auf allen Prozessoren implementiert.
- PRSABORT hat nur dann eine Bedeutung, wenn der Prozeß durch
PRSYSENTRY angehalten oder als PRASLEEP gekennzeichnet worden
ist; es weist den Prozeß an, die Ausführung des Systemaufrufs abzu-
brechen (siehe PIOCSENTRY, PIOCSEXIT).
- PRSTOP weist den Prozeß an zum frühestmöglichen Zeitpunkt nach der
Fortsetzung der Ausführung erneut anzuhalten (siehe PIOCSTOP). Ins-
besondere wenn der Prozeß wegen PRSIGNALLED oder PRFAULTED ange-
halten worden ist, wird beim nächsten Anhalten PRREQUESTED
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
angezeigt; der Prozeß wird dann kein weiteres Mal angehalten und er
führt keinen Benutzer-Code aus.
PIOCRUN kann nicht ausgeführt werden (EBUSY), wenn sie für einen Pro-
zeß aufgerufen wird, der nicht wegen eines bedeutsamen Ereignisses
angehalten worden ist. Nach dem Aufruf von PIOCRUN wird der Prozeß bei
einem bedeutsamen Ereignis nicht mehr angehalten; dies gilt selbst
dann, wenn er wegen eines konkurrierenden Mechanismus angehalten
bleibt.
PIOCSTRACE*
Damit wird eine Gruppe von Signalen definiert, die überwacht werden
sollen. Beim Empfang eines dieser Signale wird ein überwachter Prozeß
angehalten. Die in der Gruppe enthaltenen Signale werden in einer
Kopie von sigsett definiert, die durch p adressiert wird. Der Empfang
von SIGKILL kann nicht überwacht werden.
Wenn ein Signal, das in der Gruppe der blockierten Signale enthalten
ist, an den überwachten Prozeß geschickt wird, wird das Signal nicht
empfangen. Es bewirkt dann so lange nicht das Anhalten eines Prozes-
ses, bis es aus der Gruppe der blockierten Signale entfernt wird; dies
kann durch den Prozeß selbst geschehen oder durch die Definition der
Gruppe der blockierten Signale mit PIOCSHOLD bzw. der Option PRSHOLD
von PIOCRUN.
PIOCGTRACE
Die aktuell protokollierte Signalgruppe wird in eine Kopie von
sigsett zurückgegeben, die durch p adressiert wird.
PIOCSSIG*
Das aktuelle Signal und die zugehörigen Signalinformationen werden dem
Inhalt der siginfo-Struktur entsprechend eingestellt, die durch p
adressiert wird (siehe <sys/siginfo.h>). Wenn die angegebene Signal-
Nummer oder p Null ist, wird das aktuelle Signal gelöscht. Diese Ope-
ration hat insofern eine andere Funktion als kill oder PIOCKILL, als
das Signal sofort nach der Fortsetzung der Ausführung an den Prozeß
übermittelt wird (unabhängig davon, ob es blockiert wird oder nicht),
und es nicht zusätzlich zu einem Abbruch mit PRSIGNALLED kommt,
selbst wenn das Signal überwacht wird. Indem das aktuelle Signal auf
SIGKILL gesetzt wird, wird der Prozeß sofort beendet - auch dann, wenn
er bereits angehalten worden ist.
PIOCKILL*
An den Prozeß wird ein Signal übermittelt, das eine ähnliche Funktion
wie kill hat; p zeigt auf einen int-Wert zur Angabe des Signals. Durch
die Übermittlung von SIGKILL wird der Prozeß sofort beendet.
PIOCUNKILL*
Hiermit wird ein Signal gelöscht, d. h., es wird aus der Gruppe der
anstehenden Signale entfernt; auf das aktuelle Signal hat dies gegebenen-
falls keine Auswirkungen. p zeigt auf einen int-Wert zur Angabe des Sig-
nals. Beim Versuch, SIGKILL zu löschen, wird ein Fehler zurückgegeben.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
PIOCGHOLD, PIOCSHOLD*
PIOCGHOLD gibt die Gruppe der blockierten Signale (d. h. derjenigen
Signale, die mit Verzögerungen an den Prozeß übermittelt werden) in
einer Kopie von sigsett zurück, die von p adressiert wird. PIOCSHOLD
richtet die Gruppe der blockierten Signale entsprechend ein; SIGKILL
und SIGSTOP können jedoch nicht blockiert werden.
PIOCMAXSIG, PIOCACTION
Diese Operationen liefern Informationen über die Signal-Aktionen, die
dem überwachten Prozeß zugeordnet sind [siehe sigaction(2)].
PIOCMAXSIG gibt im durch p adressierten int-Wert die größtmögliche
Signalnummer zurück, die vom System erkannt wird. Hiermit kann Spei-
cherplatz für die PIOCACTION-Operation reserviert werden, die die
Signal-Aktionen des überwachten Prozesses in einem Array von
sigaction-Strukturen zurückgibt, die von p adressiert werden. Die Sig-
nalnummern entsprechen den um 1 versetzten Array-Indizes; somit
erscheint die Aktion für die Signalnummer n an Position n-1 des
Arrays.
PIOCSFAULT*
Hiermit werden eine Reihe von Hardware-Fehlern definiert, die proto-
kolliert werden sollen. Das Auftreten eines dieser Fehler läßt den
überwachten Prozeß anhalten. Die Fehler werden über eine Kopie von
fltsett definiert, die durch p adressiert wird. Die Fehlernamen sind
in <sys/fault.h> definiert und nachfolgend aufgeführt. Einige der Feh-
lernamen kommen nur bei einem Teil der Prozessoren vor; bei einigen
Prozessoren gibt es zusätzlich prozessor-spezifische Fehlernamen.
FLTILL Ungültige Anweisung
FLTPRIV Privilegierte Anweisung
FLTBPT Haltepunkt-Trap
FLTTRACE Trace-Trap
FLTACCESS Fehler bei Speicherzugriff
FLTBOUNDS Verletzung der Speichergrenze
FLTIOVF Ganzzahliger Überlauf
FLTIZDIV Division durch Null
FLTFPE Fehler bei Gleitkommarechnung
FLTSTACK Nicht behebbarer Stack-Fehler
FLTPAGE Behebbarer Seiten-Fehler (eine zur Verarbeitung benö-
tigte Seite befindet sich aktuell nicht im realen Spei-
cher)
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
Wenn ein Fehler nicht protokolliert wird, wird im Normalfall ein Sig-
nal an den Prozeß übermittelt, bei dem der Fehler auftrat. Beim Anhal-
ten eines Prozesses wegen eines Fehlers wird das Signal bei der Fort-
setzung der Ausführung an den Prozeß übermittelt, es sei denn, der
Fehler wird durch PIOCCFAULT oder durch die Option PRCFAULT von
PIOCRUN beseitigt. FLTPAGE stellt eine Ausnahme dar; es wird kein Sig-
nal übermittelt. Es kann noch zusätzliche prozessor-spezifische Fehler
geben, die diesem Fehler ähnlich sind. prinfo in der prstatus-
Struktur gibt das zu übermittelnde Signal an und enthält rechner-
spezifische Informationen in bezug auf den Fehler.
PIOCGFAULT
Die aktuell protokollierte Fehler-Gruppe wird in einer Kopie von
fltsett zurückgegeben, die durch p adressiert wird.
PIOCCFAULT*
Der aktuelle Fehler wird gegebenenfalls gelöscht; das zugehörige Sig-
nal wird nicht an den Prozeß übermittelt.
PIOCSENTRY*, PIOCSEXIT*
Diese Operationen bewirken das Anhalten des Prozesses bei seinem Auf-
ruf bzw. seiner Beendigung von bestimmten Systemaufrufen. Die Gruppe
der zu überwachenden Systemaufrufe wird über eine Kopie von syssett
zurückgegeben, die durch p adressiert wird.
Wenn die Aktivierung eines Systemaufrufs überwacht wird, wird der
überwachte Prozeß angehalten, nachdem er den Systemaufruf abgesetzt
hat, aber noch bevor die Argumente des Systemaufrufs vom Prozeß abge-
fragt worden sind. Wenn die Beendigung eines Systemaufrufs überwacht
wird, wird der überwachte Prozeß bei der Beendigung des Systemaufrufs
angehalten, kurz bevor er nach vorhandenen Signalen sucht und er auf
Benutzerebene zurückkehrt. Zu diesem Zeitpunkt sind sämtliche Rück-
kehrwerte in den gesicherten Registern des überwachten Prozesses
gespeichert worden.
Wenn der überwachte Prozeß beim Aktivieren eines Systemaufrufs ange-
halten wird (PRSYSENTRY) oder sich wegen eines Systemaufrufs in einem
unterbrechbaren Wartezustand befindet (d. h. PRASLEEP gesetzt ist),
kann er zur sofortigen Beendigung des Systemaufrufs angewiesen werden,
indem das Flag PRSABORT in einer PIOCRUN-Anforderung angegeben wird.
Der Prozeß kehrt mit dem Fehler EINTR auf die Benutzerebene zurück, es
sei denn, die Beendigung des Systemaufrufs wird überwacht.
PIOCGENTRY, PIOCGEXIT
Diese Operationen geben die Aktivierung bzw. Beendigung des aktuell
überwachten Systemaufrufs in einer Kopie von syssett zurück, die von
p adressiert wird.
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
PIOCSFORK*, PIOCRFORK*
PIOCSFORK setzt das Inherit-on-fork-Flag im überwachten Prozeß: die
Tracing-Flags des Prozesses werden vom Sohnprozeß eines fork-System-
aufrufs geerbt. PIOCRFORK setzt dieses Flag zurück; beim Starten der
Sohnprozesse sind alle Tracing-Flags zurückgesetzt.
PIOCSRLC*, PIOCRRLC*
PIOCSRLC setzt das Run-on-last-close-Flag im überwachten Prozeß: wenn
der letzte der /proc-Dateideskriptoren mit Schreibberechtigung, die
auf den überwachten Prozeß Bezug nehmen, geschlossen wird, werden
sämtliche Tracing-Flags des Prozesses zurückgesetzt, und alle anste-
henden Stop-Direktiven werden storniert; ist der Prozeß angehalten,
dann wird er so aktiviert, als wäre PIOCRUN für ihn aufgerufen worden.
PIOCRRLC setzt dieses Flag zurück: der Status der Tracing-Flags des
Prozesses bleibt erhalten, und der Prozeß wird beim Schließen der Pro-
zeßdatei nicht aktiviert.
PIOCGREG, PIOCSREG*
Diese Operationen laden den Inhalt der gesicherten Register des Pro-
zesses in ein durch p adressiertes Array bzw. laden den Inhalt aus
diesem Array; das Array ist vom Typ gregsett. Auf den Registerinhalt
kann über eine Reihe von vordefinierten Indizes (siehe PIOCSTATUS)
zugegriffen werden. Im Prozessor-Statuswort (PSW) können nur bestimmte
Bits durch PIOCSREG geändert werden; auf Rechnern vom Typ 3B2 gehören
hierzu die Bedingungs-Code-Bits sowie das Bit zur Aktivierung der
Ablaufverfolgung. Andere Register mit speziellen Zugriffsrechten kön-
nen überhaupt nicht geändert werden. PIOCSREG schlägt fehl (EBUSY),
wenn sie auf einen Prozeß angewandt wurde, der nicht wegen eines
bedeutsamen Ereignisses angehalten wird.
PIOCGFPREG, PIOCSFPREG*
Diese Operationen laden die Gleitkommaregister des gespeicherten Pro-
zesses in eine durch p adressierte Struktur bzw. rufen sie aus dieser
Struktur ab; die Struktur ist vom Typ fpregsett. Wenn der Rechner
nicht mit Hardware für Gleitkommaarithmetik ausgestattet ist, wird ein
Fehler (EINVAL) zurückgegeben. PIOCSFPREG schlägt fehl (EBUSY), wenn
sie für einen Prozeß ausgeführt wird, der nicht wegen eines bedeutsa-
men Ereignisses angehalten wird.
PIOCNICE*
Die nice(1)-Priorität des überwachten Prozesses wird um den Betrag
erhöht, der in dem durch p adressierten int-Wert enthalten ist. Ein
derartiges Hochsetzen der Prozeßpriorität ist dem Systemverwalter vor-
behalten; das Heruntersetzen dagegen ist jedem Benutzer erlaubt.
PIOCPSINFO
Hierdurch werden verschiedene Prozeß-Informationen ausgegeben (z. B.
die von ps(1) ausgegebenen Informationen). p ist ein Zeiger auf eine
prpsinfo-Struktur, die mindestens die folgenden Felder enthält:
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
typedef struct prpsinfo
{
char prstate; /* Numerischer Prozeß-Status (siehe prsname) */
char prsname; /* Druckbares Zeichen für prstate */
char przomb; /* !=0: Prozeß wurde beendet; es wird jedoch nicht
auf die Beendigung des Prozesses gewartet */
char prnice; /* nice-Priorität für CPU-Nutzung */
ulong prflag; /* Prozeß-Flags */
uidt pruid; /* Reale Benutzernummer */
gidt prgid; /* Reale Gruppennummer */
pidt prpid; /* Eindeutige Prozeßnummer */
pidt prppid; /* Prozeßnummer des Vaterprozesses */
pidt prpgrp; /* Prozeßnummer des Prozeßgruppenführers */
pidt prsid; /* Sitzungsnummer */
caddrt praddr; /* Physische Adresse des Prozesses */
long prsize; /* Größe des Prozeß-Abbilds in Seiten */
long prrssize; /* Anzahl der Seiten im residenten Teil*/
caddrt prwchan; /* Warte-Adresse für Prozesse im Wartezustand */
timestruct prstart; /* Zeitpunkt des Prozeß-Starts (sek+nsek nach der
Systemuhr) */
timestruct prtime; /* Rechenzeit im Benutzer- und System-Modus für
diesen Prozeß */
long prpri; /* Priorität (hoher Wert = hohe Priorität) */
char proldpri; /* (Vor V5.41) Niedriger Wert = hohe Priorität */
char prcpu; /* (Vor V5.41) Speicherverbrauch für Scheduling */
devt prttydev; /* Steuerndes tty-Gerät (PRNODEV = kein
steuerndes tty-Gerät) */
char prclname[8]; /* Name der Scheduling-Klasse */
char prfname[16]; /* Letztes Element des von exec abgearbeiteten
Pfadnamens */
char prpsargs[PRARGSZ]; /* Anfangszeichen der Argumentenliste */
long prfiller[20]; /* Derzeit noch nicht benutzt*/
} prpsinfot;
Einige der Einträge in prpsinfo (z. B. prstate und prflag) sind
system-spezifisch und können in den verschiedenen Betriebssystem-
Versionen eine unterschiedliche Bedeutung haben. praddr wurde in frü-
heren Systemen benutzt; in den aktuellen Systemen hat es keine reale
Bedeutung mehr.
PIOCPSINFO kann für einen Zombie-Prozeß aufgerufen werden (d. h. einen
beendeten Prozeß, für den sein Vaterprozeß noch nicht einen wait-
Systemaufruf ausgeführt hat).
PIOCNMAP, PIOCMAP
Diese Operationen liefern Informationen über die Speicher-Mappings
(virtuellen Adreßbereiche), die dem überwachten Prozeß zugeordnet
sind. PIOCNMAP gibt in dem durch p adressierten int-Wert die Anzahl
der aktuell aktiven Mappings zurück. Dies kann zur Reservierung von
Speicherplatz für die PIOCMAP-Operation benutzt werden; diese Opera-
tion gibt die aktuell aktiven Mappings aus. Mit p wird für PIOCMAP ein
Array aus Elementen vom Typ prmapt adressiert; für jedes Mapping wird
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
ein Array-Element (eine Struktur) zurückgegeben, außerdem ein zusätz-
liches Element mit allen Nullen, die das Ende der Liste kennzeichnen.
typedef struct prmap
{
caddrt prvaddr; /* Basisadresse des virtuellen Adreßraums */
ulong prsize; /* Größe des Mapping in Byte */
offt proff; /* Offset in das abgebildete Objekt
(falls vorhanden) */
long prmflags; /* Zugriffsberechtigungen und Attribut-Flags */
long prfiller[4]; /* Derzeit nicht benutzt */
} prmapt;
prvaddr ist die virtuelle Basisadresse des Mapping innerhalb des
überwachten Prozesses und prsize seine Größe in Byte. proff ist der
Offset innerhalb des abgebildeten Objekts (falls vorhanden), auf das
die Basisadresse abgebildet wird.
prmflags ist eine Bit-Maske mit Zugriffsberechtigungen und Attribut-
Flags:
MAREAD Das Mapping soll vom überwachten Prozeß gelesen werden
können
MAWRITE Das Mapping soll vom überwachten Prozeß geändert werden
können
MAEXEC Das Mapping soll vom überwachten Prozeß ausgeführt wer-
den können
MASHARED Die Änderungen am Mapping gelten auch für das abgebil-
dete Objekt
MABREAK Das Mapping wird durch den Systemaufruf brk vergrößert
MASTACK Das Mapping wird durch Stack-Fehler automatisch vergrößert
PIOCOPENM
Der Rückkehrwert retval liefert einen Dateideskriptor für ein abgebil-
detes Objekt, das dem überwachten Prozeß zugeordnet ist; der Dateide-
skriptor hat nur die Leseberechtigung. Wenn p Null ist, wird die durch
exec ausgeführte Datei des Prozesses (seine Datei a.out) ausfindig
gemacht. Dadurch kann ein Debugger die Objektdatei-Symboltabelle aus-
findig machen, ohne daß er den Pfadnamen der ausführbaren Datei kennt.
Wenn p einen Wert ungleich Null hat, zeigt es auf eine caddrt-
Struktur mit einer virtuellen Adresse innerhalb des überwachten Pro-
zesses, und das abgebildete Objekt, das dieser Adresse zugeordnet ist,
wird gefunden (falls vorhanden); dadurch kann ein Dateideskriptor für
eine gemeinsam genutzte Bibliothek abgerufen werden, die mit dem Pro-
zeß verknüpft ist. Bei einem Fehler (ungültige Adresse oder kein abge-
bildetes Objekt für die angegebene Adresse vorhanden) wird der Rück-
kehrwert -1 ausgegeben.
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
PIOCCRED
Diese Operation fragt die Benutzerdaten für den Prozeß ab. p zeigt auf
eine Kopie von prcredt, die durch die Operation belegt wird:
typedef struct prcred
{
uidt preuid; /* Effektive Benutzernummer */
uidt prruid; /* Reale Benutzernummer */
uidt prsuid; /* Abgespeicherte Benutzernummer (von exec) */
uidt pregid; /* Effektive Gruppennummer */
uidt prrgid; /* Reale Gruppennummer */
uidt prsgid; /* Abgespeicherte Gruppennummer (von exec) */
uint prngroups; /* Anzahl der zusätzlichen Gruppen */
} prcredt;
PIOCGROUPS
Diese Operation fragt zusätzliche Gruppennummern ab, die dem Prozeß
zugeordnet sind. p zeigt auf ein Array mit Elementen vom Typ uidt,
die durch die Operation belegt werden. Mit PIOCCRED kann vorab die
Anzahl der Gruppen (prngroups) bestimmt werden, die zurückgegeben
werden, und außerdem der Speicherplatz, der für sie reserviert werden
sollte.
PIOCGETPR, PIOCGETU
Diese Operationen kopieren die proc-Struktur des überwachten Prozesses
bzw. den Benutzerbereich in den Puffer, der durch p adressiert wird.
Diese Operationen werden aus Gründen der Vollständigkeit angegeben;
der direkte Zugriff auf eine dieser Strukturen sollte jedoch nicht
notwendig sein, da die relevanten Statusinformationen über andere
Steuer-Operationen abgefragt werden können. Von der Benutzung dieser
Operationen wird abgeraten, da ein Programm dadurch nur in einer
bestimmten Version des Betriebssystems ablaufen kann.
PIOCGETPR kann für einen Zombie-Prozeß aufgerufen werden (siehe
PIOCPSINFO).
DIAGNOSE
Die folgenden Fehler erscheinen zusätzlich zu den normalen Fehlern im
Zusammenhang mit dem Zugriff auf das Dateisystem:
ENOENT Der überwachte Prozeß ist nach dem Öffnen beendet worden.
EIO Eine E/A-Operation wurde an einer ungültigen Adresse
innerhalb des überwachten Prozesses versucht.
EBADF Für einen Dateideskriptor, der nicht mit der Schreibbe-
rechtigung geöffnet wurde, wurde eine E/A- oder ioctl-
Operation versucht, für die die Schreibberechtigung not-
wendig ist.
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
EBUSY PIOCSTOP oder PIOCWSTOP wurde für einen Systemprozeß
durchgeführt. Für eine Prozeßdatei, die bereits zum
Schreiben geöffnet worden war, wurde ein open-Systemaufruf
im Exklusiv-Modus versucht; auf eine Prozeßdatei wurde ein
open-Systemaufruf zum Schreiben versucht, obwohl die Pro-
zeßdatei im Exklusiv-Modus geöffnet worden ist. Für einen
Prozeß, der nicht wegen eines bedeutsamen Ereignisses
angehalten worden war, wurde PIOCRUN, PIOCSREG oder
PIOCSFPREG aufgerufen; es wurde versucht, /proc einzuhän-
gen, obwohl es bereits eingehängt war.
EPERM Ein gewöhnlicher Benutzer (nicht der Systemverwalter) ver-
suchte, die Priorität eines Prozesses mit PIOCNICE zu
erhöhen.
ENOSYS Es wurde versucht, für einen Eintrag in /proc eine nicht
unterstützte Operation (Erstellen, Entfernen, Verweis her-
stellen, Verweis aufheben) auszuführen.
EFAULT Eine E/A- oder ioctl-Anforderung bezog sich auf eine
ungültige Adresse innerhalb des Steuerungs-Prozesses.
EINVAL Hiermit wird normalerweise angezeigt, daß bei einem
Systemaufruf ein ungültiges Argument angegeben wurde. Die-
ser Fehler kann u. a. unter den folgenden Bedingungen auf-
treten: der ioctl-Code ist undefiniert; eine ioctl-Opera-
tion wurde für einen Dateideskriptor aufgerufen, der sich
auf das Verzeichnis /proc bezog; bei PIOCSSIG, PIOCKILL
oder PIOCUNKILL wurde eine Signalnummer außerhalb des
zulässigen Bereichs angegeben. Bei PIOCUNKILL wurde
SIGKILL angegeben; bei einer PIOCOPENM-Anforderung wurde
eine ungültige Adresse angegeben; PIOCGFPREG oder
PIOCSFPREG wurde auf einem Rechner ohne Arithmetikprozes-
sor aufgerufen.
EINTR Der Steuerungs-Prozeß hat ein Signal empfangen, während er
auf das Anhalten des überwachten Prozesses mit PIOCSTOP
oder PIOCWSTOP wartete.
EAGAIN Der überwachte Prozeß hat einen exec-Systemaufruf für eine
Objektdatei mit gesetztem s-Bit für den Eigentümer/die
Gruppe bzw. für eine Objektdatei aktiviert, für die er
keine Leseberechtigung hat; außerdem wird dieser Fehler
durch alle Operationen ausgegeben, die auf den Prozeß-
datei-Deskriptor ausgeführt werden (mit Ausnahme von
close).
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
HINWEISE
Jede Operation (ioctl oder E/A) ist mit Sicherheit eigenständig unter
Berücksichtigung des überwachten Prozesses; dies gilt jedoch nicht für
Systemprozesse.
Mit Ausnahme des Systemverwalters kann kein Benutzer eine Datei in
/proc öffnen, wenn nicht sowohl die Benutzer- als auch die Gruppennum-
mer des aufrufenden Prozesses zu den Nummern des überwachten Prozesses
passen und die Objektdatei durch den aufrufenden Prozeß gelesen werden
kann. Dateien, die den Prozessen mit gesetztem s-Bit für den Eigentü-
mer und die Gruppe zugeordnet sind, können nur durch den Systemverwal-
ter geöffnet werden. Ein geöffneter Prozeßdateideskriptor wird ungül-
tig, wenn der überwachte Prozeß einen exec-Systemaufruf für eine
Objektdatei mit gesetztem s-Bit für den Eigentümer bzw. die Gruppe
ausführt, die er nicht lesen kann; dies gilt selbst dann, wenn er
durch den Systemverwalter geöffnet worden wird. Mit Ausnahme von close
wird jede Operation, die für einen ungültigen Dateideskriptor ausge-
führt wird, mit EAGAIN beendet. Wenn in einer derartigen Situation
Tracing-Flags gesetzt sind und die Prozeßdatei zum Schreiben geöffnet
wurde, wird der Prozeß angewiesen anzuhalten, wobei dann sein Run-on-
last-close-Flag gesetzt ist (siehe PIOCSRLC). Dadurch kann ein
Steuerungs-Prozeß (mit der entsprechenden Berechtigung) die Prozeßda-
tei erneut öffnen, um einen gültigen Dateideskriptor abzufragen, den
ungültigen Dateideskriptor schließen und dann mit seiner Verarbeitung
fortfahren. Wenn der ungültige Dateideskriptor lediglich geschlossen
wird, wird die Ausführung des überwachten Prozesses ohne vorheriges
Setzen von Tracing-Flags fortgesetzt. Ein Prozeß, der zwar aktuell
nicht zum Schreiben über /proc geöffnet ist, für den aber andererseits
noch Tracing-Flags von einem früheren open-Systemaufruf her gesetzt
sind und der den exec-Systemaufruf für eine Objektdatei mit gesetztem
s-Bit für den Eigentümer/die Gruppe oder für eine nicht zum Lesen
geöffnete Objektdatei ausführt, wird nicht angehalten; statt dessen
werden sämtliche seiner Tracing-Flags zurückgesetzt.
Es gibt aus Gründen der Symmetrie und Effizienz mehr Steuerungs-
Operationen, als unbedingt notwendig wären.
Die /proc-Dateideskriptoren können in einem poll(2)-Systemaufruf ver-
wendet werden, wenn auf das Anhalten einer Gruppe von Prozessen gewar-
tet wird. Wird das Poll-Ereignis POLLPRI angefordert und zurückgege-
ben, zeigt es an, daß der Prozeß bei einem bedeutsamen Ereignis ange-
halten wurde. Möglicherweise werden die Poll-Ereignisse POLLHUP,
POLLERR und POLLNVAL zurückgegeben werden, obwohl sie nicht angefor-
dert werden können. POLLHUP gibt an, daß der Prozeß beendet ist.
POLLERR gibt an, daß der Dateideskriptor ungültig geworden ist.
POLLNVAL wird direkt zurückgegeben, wenn POLLPRI für einen Dateide-
skriptor angefordert wird, der auf einen Systemprozeß verweist (siehe
PIOCSTOP).
Seite 15 Reliant UNIX 5.44 Gedruckt 11/98
proc(4) proc(4)
DATEIEN
/proc
Verzeichnis (Liste der aktiven Prozesse)
/proc/nnnnn
Prozeß-Abbild
SIEHE AUCH
open(2), poll(2), ptrace(2), sigaction(2), sigaltstack(2), signal(2),
sigset(2), siginfo(5).
Seite 16 Reliant UNIX 5.44 Gedruckt 11/98