• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Wartet das Prozess auf sein Kind?

Hallo Leute,
Ich will ein C Programm schreiben das als Input eine PID aufnimmt.
Das programm soll in der Lage sein mir zu sagen ob das Prozess auf die Terminierung eines seines kindprozess wartet.

So muß es aussehen :

Geben Sie die PID ein : 1234

Prozess mit PID 1234 wartet auf die Terminierung eines seines Kindprozess

Geben Sie die PID ein : 3254

Prozess mit PID 3254 wartet nicht..

Kann jemand mir helfen??
Gruß
 
ken7 schrieb:
Hallo Leute,
Ich will ein C Programm schreiben das als Input eine PID aufnimmt.
Das programm soll in der Lage sein mir zu sagen ob das Prozess auf die Terminierung eines seines kindprozess wartet.

So muß es aussehen :

Geben Sie die PID ein : 1234

Prozess mit PID 1234 wartet auf die Terminierung eines seines Kindprozess

Geben Sie die PID ein : 3254

Prozess mit PID 3254 wartet nicht..

Kann jemand mir helfen??
Gruß
Das lässt sich rausfinden, indem du die EIP und den Stack des Prozesses analysierst. Als ob das ohnehin nicht schon schwierig genug klingt, befindet sich die Anwendung (1234) zur Zeit des wait()/waitpid()-Aufrufs im Kernel-Modus, d.h. du musst zusätzlich noch EIP und Stack vom Kernel einplanen, und das alles gegen System.map abgleichen. Meiner Meinung nach viel zu kompliziert, warum führst du nicht einfach:
Code:
ps h -o wchan 1234
aus, und guckst ob es wait oder waitpid zurückgibt... (oder du guckst dir bezüglich dessen die ps sources an.)
 
wenn ich in meinem Progr.

system("ps h -o stat 1234 ") bekomme ich entweder S,R,Z ..wie kann ich dieses Ergebnis in einer Datei speichern? zum Beispiel ein Char r; und mit switch() ... case das Ergebnis auswerten?

ich habe mir auch dieses kelines Programm überlege, kann ich damit was anfangen?

Code:
  #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main (void) {
   char buf[64];
   int pid;
    char stand;
   
   printf("Geben Sie die Prozess ID ein :  ");
   scanf("%d",pid);

   memset(buf, '\0', sizeof(buf));
   readlink("/proc/pid/stat", buf, sizeof(buf) - 1); /* Hier lese ich 
                                                     denStand es kann 
                                                   entweder R, S, Z sein 
                                       und speiche ich in einem Puffer*/
   sscanf(buf, "%c", &stand);
  // printf("Meine Prozess state lautet: %s\n", stand);
	
   switch(stand)
	case 'R':
		printf("my process is Running\n");
		break,
	case 'S':
		printf("My process ist sleeping\n");
		break;
	default:
		printf("EUuuhhh!!!");
		break;


   return EXIT_SUCCESS;
}
 
Oben