Se connecter / S'enregistrer

Résolu Langage c signaux linux , modifier une variable dans un procesus fils

Solutions (10)
Tags :
  • linux
  • Programmation
|
Bonjour,

je n'arrive pas a savoir comment modifié une variables dun processus fils par un apelle de signaux

dans une boucle mon processus pére envois un signale a son processus par le fonction
kill(ppid , SIGUSR1)

j'ai configurer SIGUSR1 pour qu'il pour qu'il fait apelle a une fonction handler que j'ai crer moi méme

mais je ne sais pas comment modifié une varible du processus fils car le fonction appellé lors du signale est la fonction handler qui na pas accés au processus fils ( il me semble )


exemple :

  1. void mon_handler(int sig) {
  2. sleep(1);
  3. printf("fils >> aie !!!! \n" );
  4. fflush(stdout);
  5. }
  6.  
  7. int main () {
  8. int ppid
  9. int a = 0
  10. struct sigaction a;
  11.  
  12. sigaction(SIGUSR1, &a, NULL);
  13. ppid = fork();
  14.  
  15. if(ppid == 0){/*ds le fils*/
  16. /*on fais rien */
  17. }
  18. else{
  19. kill(ppid, SIGUSR1);
  20. }
  21.  
  22.  
  23. }




je voudrai pouvoir modifié la variable a grace a l'envois du signale SIGUSR1




merci d'avance
Contenus similaires
  • Autres pages sur : langage signaux linux modifier variable procesus fils
Meilleure solution
partage
|
:heink: 

Ton handler est appelée sur le signal, modifie une variable globale dans cette fonction. Je ne vois pas où est ton problème?
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par skywallker59.
  • Commenter cette réponse |
Score
0
òh
òi
|
CRicky a dit :
:heink: 

Ton handler est appelée sur le signal, modifie une variable globale dans cette fonction. Je ne vois pas où est ton problème?



oki merci j'ai cherché un peut trop compliqué :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
d'accor ok merci
donc comment je peut modifier une variable d'un processus en lui envoyant un signal ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Si ce sont 2 processus, les variables globales ne sont pas partagées. Une variable est globale à un processus seulement. Ce sont les threads qui partagent la même mémoire du processus.
Donc, même si dans tes 2 processus, tu as 2 variables globales (et même si elles ont la même adresse virtuelle (cf lien ci-dessous)), ce sont 2 zones mémoires différentes, donc 2 variables différentes (chaque processus possède son contexte de mémoire, et ne va jamais écraser celui d'un autre processus, si l'OS est correctement fait).
http://www.infos-du-net.com/forum/276956-21-linux-unix-probleme-segmentation
  • Commenter cette réponse |
Score
0
òh
òi
|
oui mais la variable ne doit pasétre connu du pére
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu n'as qu'à décrémenter une variable globale dans ton handler du signal.
  • Commenter cette réponse |
Score
0
òh
òi
|
elle est donné a l'avance , je doit juste a chaque fois que j'envois le signale SIGUSR1 au fils je doit décrémenter la variable a
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,

La valeur de la variable que tu veux modifier dans le fils, elle doit transiter entre le processus père et le processus fils ou alors elle est déjà connue à l'avance ?
  • Commenter cette réponse |
Score
0
òh
òi
|
j'ai une idée mais je ne sais pas comment la réaliser


je fais une boucle infini dans le processu fils qui attend la réception d'un signal bien précis a savoir SIGUSR1

est qui execute une modification de la variable a si le signale est bien reçu

mais je ne sais pas quelle fonction utilisé ?
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS