Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2)

poll(2)

ptrace(2)

sigaction(2)

sigaltstack(2)

signal(2)

sigset(2)

siginfo(5)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026