Wie lese ich die Statusinformationen einen Kindprozesses aus? (exec, fork, signal)



  • Ich habe ein Programm mit execvp innerhalb eines fork aufgerufen (also durch den Kindprozess). Nun moechte ich die Statusinformationen (also die unter proc/pid/status zu finden sind) dieses Programms nach seiner Ausfuehrung wissen.

    Also die eigentliche Aufgabe ist: ein Programm aufzurufen, heruasfinden wieviel Speicher usw es benoetigt hat, und dann mit was anderen weitermachen.
    Kann ja eigentlich nicht so schwer sein....

    Bei der obigen Realisierung hab ich das Problem dass diese Informationen weg sind. nach einem wait() waere der Kindprozess beendet, durch ein SIGCHLD abfangen ist es ein Zombieprozess. Wahrscheinlich liegt das Problem eher schon darin, dass der Prozess nach Ende dieses exec Aufrufs zum Zombie wird (automatisch, jeder danach kommende Befehl im Kindprozess wird nicht ausgefuehrt).

    Waere nett wenn mir jemand helfen koennte. Danke schonmal



  • Ich würde sagen, das macht so keinen Sinn. Der Status spiegelt den Status zum Zeitpunkt des Auslesens wieder (ein Prozess kann ja den Speicher auch wieder freigeben).



  • Ok, und wie komme ich dann an den Zeit und Speicherverbrauch des ausgefuehrten Programmes?



  • cooop schrieb:

    Bei der obigen Realisierung hab ich das Problem dass diese Informationen weg sind. nach einem wait() waere der Kindprozess beendet, durch ein SIGCHLD abfangen ist es ein Zombieprozess. Wahrscheinlich liegt das Problem eher schon darin, dass der Prozess nach Ende dieses exec Aufrufs zum Zombie wird (automatisch, jeder danach kommende Befehl im Kindprozess wird nicht ausgefuehrt).

    exec* überschreibt den aktuellen Prozess mit dem neuen Prozess. Daher kehrt der Aufruf von exec* auch nicht zurück, wenn es keinen Fehler beim überschreiben gibt.

    Eigentlich dachte ich, dass man die Informationen noch auslesen kann, solange der Prozess ein Zombie ist. Aber zB man: wait4(2) hat ja eine rusage Struktur, wenn du den Ressourcenbedarf auslesen willst.


Log in to reply