PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ptrace() und Threads



Compuholic
25-05-2003, 17:53
ch bin momentan ziemlich ratlos. Ich versuche gerade ein bisschen mit der ptrace() Funktion unter Linux herumzuspielen.

Ich hab ein Programm, daß mit vfork() einen Child Prozess erzeugt. Dieser Child Process wird vom Parent Process via ptrace debuggt. Der Child Prozess holt sich seine PID mit getpid() und führt ptrace(PTRACE_TRACEME, ...) aus. Der Parent Process wartet auf das SIGTRAP und läßt den Child Prozess dann im Singlestepmdus ablaufen. Im Child wird mit execv() ein externes Programm gestartet, dessen Code nun unter der PID des Child Prozesses läuft. Dieses Programm soll also debuggt werden.

Was passiert aber, wenn dieses Programm einen weiteren Child Prozess startet. Wie bekomme ich vom Parent Process Zugriff auf den neuen Prozess. Das Problem liegt ja darin, das die PID nicht bekannt ist, sonst könnte ich mich ja ohne Probleme einfach an den Prozess dranhängen. Gibt es da irgendeine spezielle Technik mit der man so etwas realisieren kann.

Danke

cyneox
04-06-2003, 15:03
wenn du ein kindprozess kreiert hast und dann einen weiteren kindprozess kreieren willst(vorraussetzung der erste kindprozess wird elternprozess des neuen prozesses),dann musst in dem codeabschnitt des ersten kinprozesses noch einmal vfork() oder fork() aufrufen....
beispiel:


#include <blah.h>
......
main(void)
{
pid_t pid,pid2;
if((pid=fork()<0) fprintf(stderr,"fork-fehler\n");
else if(pid==0){
/*zweites aufrufen von fork für den zweiten kindprozess*/
if((pid2=fork()<0) ....
...
/*und so weiter*/
}