Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec les signaux

    21 février 2018 à 21:58:53

    #include <sys/types.h>
    #include <unistd.h>
    #include <signal.h>
    
    int main(int ac, char **av)
    {
    	int pid = getpid();
    	printf("PID: %i\n", pid);
    	kill(pid, SIGUSR1);
    	usleep(1);
    	printf("PID: %i\n", pid);
    	return (0);
    }
    



    Bonjour / Bonsoir à tous

    Je fais en ce moment qui consiste à gérer des signaux entre deux terminaux. Cela fait plusieurs jours que j'essaye de comprendre les signaux mais je bloque sur plusieurs points :

    - ne pas faire afficher User defined signal 1. Ici, j'ai cherché à faire arrêter un processus en cours avec la commande kill. Voici le code

    - faire interagir deux terminaux entre eux. Je n'ai pas de problème à récupérer le pid mais à obtenir des interactions

    Je ne demande pas à ce qu'on me fasse le code mais bel et bien de comprendre. Etant novice en programmation système (première fois que je le fais), je ne comprend pas tout donc si cela est possible soyez explicite.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2018 à 14:55:57

      Bonjour,

      dans le principe il te faut faire un rederoutage du signal reçu vers une fonction de traitement.

      Voici un petit exemple. le programme se duplique (fork).

      Le processus fils envois 2 fois le signal SIGUSR1 au processus pere.

      Le processus pere attend d'avoir reçu 2 fois le signal SIGUSR1 avant de poursuivre son execution.

      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <sys/types.h>
      #include <signal.h>
      
      int cpt = 0;
      
      void traitement(int sig) {
          (void) signal(SIGUSR1, traitement);
      
      
          printf("un signal SIGUSR1 pid :%d ppid=%d\n", getpid(), getppid());
      
          cpt++;
      }
      
      int main(int argc, char** argv) {
      
          int pidP1, pid;
          (void) signal(SIGUSR1, traitement);
      
          pidP1 = getpid(); // pid de P1
          printf("process princ: %d\n", pidP1);
          pid = fork();
          if (pid == 0) // process fils
          {
              //envoyer 2 fois SIGUSR1 au processus pere
              kill(pidP1, SIGUSR1);
              sleep(3); // pause de 3 secondes
              kill(pidP1, SIGUSR1);
      
          } else // process pere
          {
              while (cpt != 2) {
                  pause();
              }
              printf("2 signaux reçu, on continu sur le process pere\n");
      
          }
      
          return (EXIT_SUCCESS);
      }
          
      
      



      • Partager sur Facebook
      • Partager sur Twitter

      Problème avec les signaux

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown