Réactiver un processus

Résolu
sarahchaima Messages postés 12 Statut Membre -  
sarahchaima Messages postés 12 Statut Membre -
Bonsoir tout le monde j'espère que vous allez bien!; j'ai rencontré un petit problème dans le code suivant; c'est quand j'appuie sur la combinaison ctrl+z pour désactiver mes processus ;ils doivent être réactivés quand j'appuie une autre fois sur ctrl+z ms avec mon code les processus sont réactivés juste après leur désactivation tout seul; ,et je veux savoir svp le problème pourquoi mon code ne fonctionne pas correctement
Merci d'avance!
Note:
il faut appuyer la combinaison ctr+c trois fois pour arrêter le programme
les processus sont activés ou réactivés à tout moment

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
volatile sig_atomic_t compteurPourCTRL_Z=0;
volatile sig_atomic_t compteurPourCTRL_C=0;
volatile sig_atomic_t CAS=0;
volatile sig_atomic_t suspendu=0;
static void handler1(int sigNum)
{
compteurPourCTRL_C ++;

if(compteurPourCTRL_C==3){
printf("\n processus termne\n");
kill(getpid(),SIGKILL);
}
}
static void handler2(int sigNum)
{

if(suspendu==0){
//suspendu=0 le cas initiale avant activation
suspendu=1;//suspendu==1 veut dire activé
printf("\n processus activé \n");
alarm(1);
}else if(suspendu==1){
suspendu=2;//suspendu=2 veut dire désactivé
printf("\n processus désactivé \n");
kill(getpid(),SIGTSTP);

}else if(suspendu==2){
suspendu=1;
printf("\n processus réactivé \n");
kill(getpid(),SIGCONT);
}

}

static void handler3(int sigNum)
{
if(suspendu==1){//veut dire on est dqns le cqs active
if(CAS==0){
CAS ++;
printf("\n processus:1,mesure:1 \n");

alarm(2);
}else if(CAS==1){
CAS++;

printf("\n processus:1,mesure:2 \n");

alarm(2);
}else {
CAS=0;

printf("\n processus:2,mesure \n");

alarm(2);}

}
}

int main()
{

signal(SIGINT, handler1);
signal(SIGTSTP,handler2);
signal(SIGALRM,handler3);

while(1){
pause();

}

}

2 réponses

  1. sarahchaima Messages postés 12 Statut Membre
     
    #include<stdio.h> 
    #include<unistd.h> 
    #include<stdlib.h> 
    #include<signal.h> 
    volatile sig_atomic_t compteurPourCTRL_Z=0; 
    volatile sig_atomic_t compteurPourCTRL_C=0; 
    volatile sig_atomic_t CAS=0; 
    volatile sig_atomic_t suspendu=0; 
    static void handler1(int sigNum) 
    { 
    compteurPourCTRL_C ++; 
    
    if(compteurPourCTRL_C==3){ 
    printf("\n processus termne\n"); 
    kill(getpid(),SIGKILL); 
    } 
    } 
    static void handler2(int sigNum) 
    { 
    
    if(suspendu==0){ 
    //suspendu=0 le cas initiale avant activation 
    suspendu=1;//suspendu==1 veut dire activé 
    printf("\n processus activé \n"); 
    alarm(1); 
    }else if(suspendu==1){ 
    suspendu=2;//suspendu=2 veut dire désactivé 
    printf("\n processus désactivé \n"); 
    kill(getpid(),SIGTSTP); 
    
    }else if(suspendu==2){ 
    suspendu=1; 
    printf("\n processus réactivé \n"); 
    kill(getpid(),SIGCONT); 
    } 
    
    } 
    
    static void handler3(int sigNum) 
    { 
    if(suspendu==1){//veut dire on est dqns le cqs active 
    if(CAS==0){ 
    CAS ++; 
    printf("\n processus:1,mesure:1 \n"); 
    
    alarm(2); 
    }else if(CAS==1){ 
    CAS++; 
    
    printf("\n processus:1,mesure:2 \n"); 
    
    alarm(2); 
    }else { 
    CAS=0; 
    
    printf("\n processus:2,mesure \n"); 
    
    alarm(2);} 
    
    } 
    } 
    
    int main() 
    { 
    
    signal(SIGINT, handler1); 
    signal(SIGTSTP,handler2); 
    signal(SIGALRM,handler3); 
    
    while(1){ 
    pause(); 
    }


    voici le code une autre fois,j'ai pas pu modifié ma question!
    j'ai utilisé:
    kill(getpid(),SIGTSTP);

    pour mettre le programme en pause.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu essayé sans cette instruction en ligne 29?
      0
      1. sarahchaima Messages postés 12 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        oui bien sûr!
        j'ai essayé et ça marche maintenant merci beaucoup pour l'aide
        j'ai juste rajouté alarm(1) après
          kill(getpid(),SIGCONT);
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > sarahchaima Messages postés 12 Statut Membre
         
        en fait, avec le kill, c'est comme si quelqu'un faisait ctrl-Z.
        0
      3. sarahchaima Messages postés 12 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui j'ai compris en fin de compte ,merci
        0