elementary.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include <mpi.h>
  2. #include <stdio.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7. char buffer[100];
  8. clock_t current_time;
  9. void elapsedTimeToString(char *output, size_t size) {
  10. static clock_t start_time = 0;
  11. if (start_time == 0) {
  12. // Enregistrez le temps de démarrage lors de la première invocation
  13. start_time = clock();
  14. }
  15. // Calculez le temps écoulé depuis le démarrage du programme
  16. clock_t current_time = clock();
  17. double elapsed_time = ((double)(current_time - start_time)) / CLOCKS_PER_SEC;
  18. // Écrivez le temps écoulé dans la chaîne de texte
  19. snprintf(output, size, "Temps écoulé : %.2f secondes", elapsed_time);
  20. }
  21. int writeToFile(const char* text) {
  22. FILE *file;
  23. // Ouverture du fichier en mode écriture (efface le contenu existant)
  24. file = fopen("/tmp/output.txt", "a");
  25. // Vérifier si l'ouverture du fichier a réussi
  26. if (file == NULL) {
  27. perror("Erreur lors de l'ouverture du fichier");
  28. return 1;
  29. }
  30. // Écriture dans le fichier
  31. fprintf(file, "%s", text);
  32. // Fermeture du fichier
  33. fclose(file);
  34. printf("Données écrites dans le fichier avec succès.\n");
  35. return 0;
  36. }
  37. void handle_sigterm(int signum) {
  38. printf("Received SIGTERM (%d).\n", signum);
  39. snprintf(buffer,sizeof(buffer), "Received SIGTERM (%d).\n",signum);
  40. writeToFile(buffer);
  41. elapsedTimeToString(buffer, sizeof(buffer));
  42. writeToFile(buffer);
  43. // Ajoutez ici le code de nettoyage ou de gestion du signal SIGKILL
  44. // Exemple : Fermez les fichiers, libérez la mémoire, etc.
  45. // ...
  46. // Terminez proprement le programme
  47. exit(EXIT_SUCCESS);
  48. }
  49. void handle_sigint(int signum) {
  50. printf("Received SIGINT (%d).\n", signum);
  51. snprintf(buffer,sizeof(buffer), "Received SIGINT (%d).\n",signum);
  52. writeToFile(buffer);
  53. elapsedTimeToString(buffer, sizeof(buffer));
  54. writeToFile(buffer);
  55. exit(EXIT_SUCCESS);
  56. }
  57. int main() {
  58. // Installez le gestionnaire de signal pour SIGKILL
  59. if (signal(SIGTERM, handle_sigterm) == SIG_ERR) {
  60. perror("Erreur lors de l'installation du gestionnaire de signal");
  61. return EXIT_FAILURE;
  62. }
  63. if (signal(SIGINT, handle_sigint) == SIG_ERR) {
  64. perror("Erreur lors de l'installation du gestionnaire de signal pour SIGINT");
  65. return EXIT_FAILURE;
  66. }
  67. MPI_Init(NULL, NULL);
  68. // Get the number of processes
  69. int world_size;
  70. MPI_Comm_size(MPI_COMM_WORLD, &world_size);
  71. // Get the rank of the process
  72. int world_rank;
  73. MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
  74. // Get the name of the processor
  75. char processor_name[MPI_MAX_PROCESSOR_NAME];
  76. int name_len;
  77. MPI_Get_processor_name(processor_name, &name_len);
  78. // Print off a hello world message
  79. printf("Hello world from processor %s, rank %d out of %d processors\n",
  80. processor_name, world_rank, world_size);
  81. printf("Le programme est en cours d'exécution. PID: %d\n", getpid());
  82. // Simulation d'une tâche en cours d'exécution
  83. while (1) {
  84. // Votre code ici...
  85. // Ajoutez une pause pour éviter une utilisation intensive du processeur
  86. sleep(1);
  87. }
  88. MPI_Finalize();
  89. return EXIT_SUCCESS;
  90. }