Réactiver un processus [Résolu]

Signaler
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020
-
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020
-
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

Messages postés
12654
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2020
702
bonjour, merci d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

pourquoi as-tu cette instruction?
kill(getpid(),SIGTSTP);
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020

#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.
Messages postés
12654
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2020
702
peux-tu essayé sans cette instruction en ligne 29?
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020
>
Messages postés
12654
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2020

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);
Messages postés
12654
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2020
702 >
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020

en fait, avec le kill, c'est comme si quelqu'un faisait ctrl-Z.
Messages postés
8
Date d'inscription
mardi 22 septembre 2020
Statut
Membre
Dernière intervention
28 septembre 2020
>
Messages postés
12654
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2020

Oui j'ai compris en fin de compte ,merci