SIGTERM et gprof

SIGTERM et gprof - C - Programmation

Marsh Posté le 21-09-2005 à 18:18:25    

Bonjour,
J essaye d utiliser gprof pour faire un profile du temps d execution des differentes fonctions de mon programme, mais j ai un petit probleme a cause de la facon dont mon programme s arrete. Mon programe a la structure suivante:
un premier executable ('ex 1') lance 2 autres executables ('ex a' et 'ex b') sous forme de processus independant.  'ex 1' fait alors un jeu de ping pong entre 'ex a' et ex b' pour qu ils soient appeles l'un apres l'autre (ils ecrivent dans une zones de memoire partagee commune). Le processus 'ex a' peut decider d arreter la totalite du programe ('ex 1' et 'ex a' et 'ex b'). L execution de 'ex a' est alors arreter nomarlement (fin de la fonction 'main') et 'ex 1' detecte cet arret ( grace a un test sur processus id). 'ex 1' envoie alors un signal d arret a 'ex b' avec un kill(exb_pid,SIGTERM).
Mon probleme c est que j ai l impression que gprof n aime pas ce genre de terminaison car il n ecrit pas le fichier de profile alors qu il l ecrit sans probleme pour 'ex 1' et 'ex a'. Est ce que mon erreur peut venir de la ou est ce qu il y aurait un autre probleme auquel je ne pense pas?
 
Pour etre un peu plus claire voici un exemple en code:
 
Dans le main de 'ex 1'

Code :
  1. ....
  2. while (exa_pid || exb_pid)
  3. {
  4.     pid = wait(&status);
  5.     /* 'ex a' is exited */
  6.     if (exa_pid == pid)
  7.       {
  8.        if (WIFEXITED(status))
  9.   {
  10.     printf("\'ex a' Normal Exit" );
  11.  
  12.     if (exb_pid != 0)
  13.       {
  14.  if (getpgid(exb_pid)>0)
  15.    {
  16.      printf("\Stopping 'ex b' for a clean exit." );
  17.      kill(exb_pid,SIGTERM); 
  18.    }
  19.  else printf("\n 'ex b' alredy terminated." );
  20.       }
  21. }
  22. .....

Reply

Marsh Posté le 21-09-2005 à 18:18:25   

Reply

Marsh Posté le 22-09-2005 à 17:48:19    

Tu es sous quel OS ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed