[unix] Process laten wachten tot execv klaar is

Pagina: 1
Acties:

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ik heb nu zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
pid_t child;

if ((child = fork()) != 0) {
   /* start profiling the child */   
   profile(child);

   /* Wait until child is done */
   waitpid(child, 0, 0);

  /* do stuff with data */
} else {
   /* execute program given on commandline */
   execv(argv[1], argv[2]);
}


Het probleem zit hem in de profile() call. Die wordt zo snel aan geroepen dat de execv() in het child process nog niet klaar is. Het resultaat is dat de profile() call dezelfde memory map krijgt als de parent, omdat er simpelweg nog geen nieuw process is ingeladen.

Als ik bv sleep(1); doe voor de profile call werkt alles voorbeeldig. Maar...ik wil zo snel mogelijk beginnen met profilen. en wie zegt dat het niet op een bepaald systeem 2 seconden duurt ipv 1?

Ik zoek dus een manier om uit te vinden of de execv van het child process klaar is vanuit het parent process.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ok ik heb het geloof ik al, ptrace() is your friend :) Sorry voor de post...kon echt niks vinden.