{"id":3347,"date":"2025-07-30T14:47:25","date_gmt":"2025-07-30T13:47:25","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=3347"},"modified":"2025-08-01T10:05:15","modified_gmt":"2025-08-01T09:05:15","slug":"gestion-des-signaux-en-c","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/","title":{"rendered":"TPX_C Les signaux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\ud83d\udd52 : 3 h maximum<\/p>\n\n\n\n<nav aria-label=\"Table des mati\u00e8res\" class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#prerequis\">Pr\u00e9requis:<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#but\">But<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#repertoire-du-travail\">R\u00e9pertoire du travail:<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercice-1-0-capture-de-sigint-ctrl-c-avec-signal\">Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#que-se-passe-t-il-si-vous-appuyez-une-fois-puis-plusieurs-fois-sur-ctrl-c\">Que se passe-t-il si vous appuyez une fois puis  plusieurs fois sur Ctrl+C ?<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#on-va-de-commenter-la-ligne-6-pour-rearmer\">On va d\u00e9-commenter la ligne 6 , pour r\u00e9armer !<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#que-se-passe-t-il-si-vous-appuyez-plusieurs-fois-sur-ctrl-c\">Que se passe-t-il si vous appuyez plusieurs fois sur Ctrl+C?<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#tester-les-commandes-dans-un-autre-terminal-a-cote-de-votre-code-lance\">tester les commandes dans un autre terminal a cot\u00e9 de votre code lanc\u00e9.<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercice-1-1-sleep-et-pause\">Exercice 1_1  sleep et pause<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#tester-avec-sleep-5\">Tester avec sleep(5)<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#tester-en-remplacant-sleep-5-par-pause\">Tester en rempla\u00e7ant sleep(5) par pause()<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#donner-les-difference-entre-sleep-5-et-pause\">Donner les diff\u00e9rence entre sleep(5) et pause() <\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercice-1-2-avec-sigaction\">Exercice  1_2 avec sigaction<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#comment-en-sortir\">Comment en sortir?<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercice-2-compteur-avec-alarm\">Exercice 2 : Compteur avec alarm()<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#que-se-passe-t-il-si-vous-remplacez-pause-par-sleep-5\">Que se passe-t-il si vous remplacez\u00a0pause()\u00a0par\u00a0sleep(5)\u00a0?<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#ajoutez-un-compteur-global-pour-afficher-le-nombre-d-alarmes-declenchees\">Ajoutez un compteur global pour afficher le nombre d&rsquo;alarmes d\u00e9clench\u00e9es.<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercice-3-blocage-de-signaux-avec-sigprocmask\">Exercice 3 : Blocage de signaux avec sigprocmask()<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#testez-en-appuyant-sur-ctrl-c-pendant-le-sleep-5-que-se-passe-t-il\">Testez en appuyant sur Ctrl+C pendant le\u00a0sleep(5). Que se passe-t-il ?<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#utilisez-sigpending-pour-afficher-les-signaux-en-attente\">Utilisez\u00a0sigpending()\u00a0pour afficher les signaux en attente.<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#exercie-4-signal-sigusr1\">Exercie 4 : signal  SIGUSR1 <\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#signaux-sigusr1-et-sigusr2-origine-et-utilite\">Signaux\u00a0SIGUSR1\u00a0et\u00a0SIGUSR2\u00a0: Origine et Utilit\u00e9<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#envoyez-kill-sigint-pid-depuis-un-autre-terminal\">Envoyez &lsquo;kill -SIGINT PID&rsquo; depuis un autre terminal<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#envoyez-kill-sigusr1-pid-depuis-un-autre-terminal\">Envoyez &lsquo;kill -SIGUSR1 PID&rsquo;  depuis un autre terminal<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/#donnez-le-code-qui-va-utiliser-le-sigusr2-code-sigusr2-c\">Donnez le code qui va utiliser le sigusr2 , code : sigusr2.c<\/a><\/li><\/ol><\/li><\/ol><\/li><\/ol><\/nav>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis\">Pr\u00e9requis:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/workboot.fr\/ciela\/category\/langage-c\/\">Langage C<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"but\">But<\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Comprendre les signaux et leurs gestionnaires.<\/li>\n\n\n\n<li>Utiliser&nbsp;<code>alarm()<\/code>&nbsp;pour des temporisations.<\/li>\n\n\n\n<li>Travailler avec&nbsp;<code>sigaction<\/code>&nbsp;pour une gestion robuste.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"repertoire-du-travail\">R\u00e9pertoire du travail:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">~\/Works\/TP_C_Signaux<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercice-1-0-capture-de-sigint-ctrl-c-avec-signal\"><strong>Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">r\u00e9pertoire : ex1, code ex1.c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>But<\/strong>&nbsp;: Emp\u00eacher Ctrl+C de terminer le programme.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n\nvoid handle_sigint(int sig) {\n    \/*  signal(SIGINT, handle_sigint); *\/ \/* relance *\/\n    printf(\"\\nTu as appuy\u00e9 sur Ctrl+C ! Mais je ne quitte pas.\\n\");\n}\n\nint main() {\n    signal(SIGINT, handle_sigint);\n    printf(\"Appuie sur Ctrl+C...\\n\");\n    while (1) sleep(1);\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Questions<\/strong>&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"que-se-passe-t-il-si-vous-appuyez-une-fois-puis-plusieurs-fois-sur-ctrl-c\">Que se passe-t-il si vous appuyez une fois puis  plusieurs fois sur Ctrl+C ?<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"on-va-de-commenter-la-ligne-6-pour-rearmer\">On va d\u00e9-commenter la ligne 6 , pour r\u00e9armer !<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"que-se-passe-t-il-si-vous-appuyez-plusieurs-fois-sur-ctrl-c\">Que se passe-t-il si vous appuyez plusieurs fois sur Ctrl+C?<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"tester-les-commandes-dans-un-autre-terminal-a-cote-de-votre-code-lance\">tester les commandes dans un autre terminal a cot\u00e9 de votre code lanc\u00e9.<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/workboot.fr\/ciela\/les-processus\/\">cours sur les processus<\/a> sous linux<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">trouver un PID <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pidof ex1 <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">autrement <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ps -aux | grep ex1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">on peut envoyer des signaux avec kill <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kill -SIGINT PIDXXXX  # d\u00e9terminer avant\n#ou \nkill -2 PIDXXXX<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et tester le signal -SIGTERM ou -15<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">et tester le signal -SIGKILL ou -9<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercice-1-1-sleep-et-pause\">Exercice 1_1  sleep et pause<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Fonction<\/th><th class=\"has-text-align-left\" data-align=\"left\">Comportement<\/th><\/tr><\/thead><tbody><tr><td><strong><code>pause()<\/code><\/strong><\/td><td>Attend&nbsp;<strong>ind\u00e9finiment<\/strong>&nbsp;un signal. Ne retourne que lorsqu&rsquo;un signal est re\u00e7u.<\/td><\/tr><tr><td><strong><code>sleep(5)<\/code><\/strong><\/td><td>Attend&nbsp;<strong>5 secondes max<\/strong>, mais peut \u00eatre interrompu par un signal (retourne le temps restant).<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">r\u00e9pertoire ex1, code : ex1_1.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n\nvoid handle_sigint(int sig) {\n    printf(\"\\nSignal SIGINT re\u00e7u (Ctrl+C) !\\n\");\n}\n\nint main() {\n    signal(SIGINT, handle_sigint);\n    printf(\"Appuyez sur Ctrl+C pendant sleep(5)...\\n\");\n\n    int temps_restant = sleep(5);  \/\/ \u2190 Remplac\u00e9 pause() par sleep(5)\n    \n    if (temps_restant > 0) {\n        printf(\"sleep() interrompu. Temps restant : %d sec\\n\", temps_restant);\n    } else {\n        printf(\"sleep() termin\u00e9 naturellement.\\n\");\n    }\n\n    while (1);  \/\/ Pour garder le programme actif\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Questions<\/strong> :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"tester-avec-sleep-5\">Tester avec sleep(5)<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"tester-en-remplacant-sleep-5-par-pause\">Tester en rempla\u00e7ant sleep(5) par pause()<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"donner-les-difference-entre-sleep-5-et-pause\">Donner les diff\u00e9rence entre sleep(5) et pause() <\/h4>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercice-1-2-avec-sigaction\">Exercice  1_2 avec sigaction<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">r\u00e9pertoire ex1, code : ex1_2.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n#include &lt;string.h>\n\nvoid handle_sigint(int sig) {\n    const char *msg = \"\\nCtrl+C bloqu\u00e9 ! (Avec sigaction, c'est fiable)\\n\";\n    write(STDOUT_FILENO, msg, strlen(msg));  \/\/ write() est async-safe\n}\n\nint main() {\n    struct sigaction sa;\n    memset(&amp;sa, 0, sizeof(sa));\n    sa.sa_handler = handle_sigint;\n    sigemptyset(&amp;sa.sa_mask);  \/\/ Aucun signal bloqu\u00e9 pendant l'ex\u00e9cution\n    sa.sa_flags = SA_RESTART;  \/\/ Options : red\u00e9marre les appels syst\u00e8me interrompus\n\n    \/\/ Associer le gestionnaire \u00e0 SIGINT\n    if (sigaction(SIGINT, &amp;sa, NULL) == -1) {\n        perror(\"Erreur sigaction\");\n        return 1;\n    }\n\n    printf(\"Appuyez sur Ctrl+C... (PID: %d)\\n\", getpid());\n    while (1) pause();\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Question<\/strong>:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"comment-en-sortir\">Comment en sortir?<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercice-2-compteur-avec-alarm\"><strong>Exercice 2 : Compteur avec alarm()<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>But<\/strong>&nbsp;: Utiliser&nbsp;<code>alarm()<\/code>&nbsp;pour afficher un message toutes les 2 secondes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9pertoire : ex2  , code : alarm.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n\nvoid handle_alarm(int sig) {\n    printf(\"ALARME ! (2 secondes pass\u00e9es)\\n\");\n    alarm(2);  \/\/ Reprogramme l'alarme\n}\n\nint main() {\n    signal(SIGALRM, handle_alarm);\n    alarm(2);  \/\/ Premi\u00e8re alarme dans 2s\n    printf(\"Compteur d\u00e9marr\u00e9 (Ctrl+C pour quitter).\\n\");\n    while (1) pause();  \/\/ Attend les signaux\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Questions<\/strong>&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"que-se-passe-t-il-si-vous-remplacez-pause-par-sleep-5\">Que se passe-t-il si vous remplacez&nbsp;<code>pause()<\/code>&nbsp;par&nbsp;<code>sleep(5)<\/code>&nbsp;?<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"ajoutez-un-compteur-global-pour-afficher-le-nombre-d-alarmes-declenchees\">Ajoutez un compteur global pour afficher le nombre d&rsquo;alarmes d\u00e9clench\u00e9es.<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercice-3-blocage-de-signaux-avec-sigprocmask\"><strong>Exercice 3 : Blocage de signaux avec sigprocmask()<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>But<\/strong>&nbsp;: Bloquer temporairement SIGINT pendant une op\u00e9ration critique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9pertoire : ex3 , code: sigprocmask.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n\nvoid handle_sigint(int sig) {\n    printf(\"SIGINT re\u00e7u, mais ignor\u00e9 pendant le calcul.\\n\");\n}\n\nint main() {\n    sigset_t mask;\n    signal(SIGINT, handle_sigint);\n\n    \/\/ Bloquer SIGINT\n    sigemptyset(&amp;mask);\n    sigaddset(&amp;mask, SIGINT);\n    sigprocmask(SIG_BLOCK, &amp;mask, NULL);\n\n    printf(\"Calcul critique en cours (5s)...\\n\");\n    sleep(5);\n\n    \/\/ D\u00e9bloquer SIGINT\n    sigprocmask(SIG_UNBLOCK, &amp;mask, NULL);\n    printf(\"Calcul termin\u00e9. Ctrl+C fonctionne \u00e0 nouveau.\\n\");\n\n    while (1) pause();\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Questions<\/strong>&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"testez-en-appuyant-sur-ctrl-c-pendant-le-sleep-5-que-se-passe-t-il\">Testez en appuyant sur Ctrl+C pendant le&nbsp;<code>sleep(5)<\/code>. Que se passe-t-il ?<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"utilisez-sigpending-pour-afficher-les-signaux-en-attente\">Utilisez&nbsp;<code>sigpending()<\/code>&nbsp;pour afficher les signaux en attente.<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"exercie-4-signal-sigusr1\">Exercie 4 : signal  SIGUSR1 <\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"signaux-sigusr1-et-sigusr2-origine-et-utilite\"><strong>Signaux&nbsp;<code>SIGUSR1<\/code>&nbsp;et&nbsp;<code>SIGUSR2<\/code>&nbsp;: Origine et Utilit\u00e9<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Les signaux&nbsp;<strong><code>SIGUSR1<\/code><\/strong>&nbsp;(10) et&nbsp;<strong><code>SIGUSR2<\/code><\/strong>&nbsp;(12) sont deux signaux&nbsp;<strong>d\u00e9finis par l&rsquo;utilisateur<\/strong>&nbsp;dans les syst\u00e8mes Unix\/Linux. Contrairement aux signaux standards comme&nbsp;<code>SIGINT<\/code>&nbsp;(Ctrl+C) ou&nbsp;<code>SIGKILL<\/code>, ils n&rsquo;ont&nbsp;<strong>aucun comportement pr\u00e9d\u00e9fini<\/strong>&nbsp;et sont enti\u00e8rement&nbsp;<strong>customisables<\/strong>&nbsp;par le programmeur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9pertoire: ex4 , code : sigusr1.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;signal.h>\n#include &lt;unistd.h>\n\n\/\/ Variable globale pour contr\u00f4ler la boucle principale\nvolatile sig_atomic_t stop = 0;\n\n\/\/ Gestionnaire de signal\nvoid handle_sigusr1(int sig) {\n    if (sig == SIGUSR1) {\n        printf(\"Signal SIGUSR1 re\u00e7u. Arr\u00eat demand\u00e9.\\n\");\n        stop = 1;  \/\/ On modifie le drapeau pour sortir de la boucle\n    }\n}\n\nint main() {\n    \/\/ Affiche le PID pour qu'on puisse envoyer le signal\n    printf(\"Mon PID est : %d\\n\", getpid());\n    printf(\"Envoyez 'kill -SIGUSR1 %d' depuis un autre terminal pour m'arr\u00eater.\\n\", getpid());\n\n    \/\/ Configuration du gestionnaire de signal\n    signal(SIGUSR1, handle_sigusr1);\n\n    \/\/ Boucle principale\n    while (!stop) {\n        printf(\"En attente... (Ctrl+C pour quitter imm\u00e9diatement)\\n\");\n        sleep(1);  \/\/ R\u00e9duit la consommation CPU\n    }\n\n    printf(\"Arr\u00eat propre du programme.\\n\");\n    return 0;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Questions<\/strong>&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"envoyez-kill-sigint-pid-depuis-un-autre-terminal\">Envoyez &lsquo;kill -SIGINT PID&rsquo; depuis un autre terminal<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"envoyez-kill-sigusr1-pid-depuis-un-autre-terminal\">Envoyez &lsquo;kill -SIGUSR1 PID&rsquo;  depuis un autre terminal<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"donnez-le-code-qui-va-utiliser-le-sigusr2-code-sigusr2-c\">Donnez le code qui va utiliser le sigusr2 , code : sigusr2.c<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udd52 : 3 h maximum Pr\u00e9requis: Langage C But R\u00e9pertoire du travail: ~\/Works\/TP_C_Signaux Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal r\u00e9pertoire : ex1, code ex1.c But&nbsp;: Emp\u00eacher Ctrl+C [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-3347","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TPX_C Les signaux - workboot<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TPX_C Les signaux - workboot\" \/>\n<meta property=\"og:description\" content=\"\ud83d\udd52 : 3 h maximum Pr\u00e9requis: Langage C But R\u00e9pertoire du travail: ~\/Works\/TP_C_Signaux Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal r\u00e9pertoire : ex1, code ex1.c But&nbsp;: Emp\u00eacher Ctrl+C [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/\" \/>\n<meta property=\"og:site_name\" content=\"workboot\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-01T09:05:15+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/gestion-des-signaux-en-c\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/gestion-des-signaux-en-c\\\/\",\"name\":\"TPX_C Les signaux - workboot\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\"},\"datePublished\":\"2025-07-30T13:47:25+00:00\",\"dateModified\":\"2025-08-01T09:05:15+00:00\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/workboot.fr\\\/ciela\\\/gestion-des-signaux-en-c\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"name\":\"workboot\",\"description\":\"Open Source, Open Minds \",\"publisher\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\",\"name\":\"workboot\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"contentUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"width\":1024,\"height\":950,\"caption\":\"workboot\"},\"image\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TPX_C Les signaux - workboot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/","og_locale":"fr_FR","og_type":"article","og_title":"TPX_C Les signaux - workboot","og_description":"\ud83d\udd52 : 3 h maximum Pr\u00e9requis: Langage C But R\u00e9pertoire du travail: ~\/Works\/TP_C_Signaux Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal r\u00e9pertoire : ex1, code ex1.c But&nbsp;: Emp\u00eacher Ctrl+C [&hellip;]","og_url":"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/","og_site_name":"workboot","article_modified_time":"2025-08-01T09:05:15+00:00","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/","url":"https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/","name":"TPX_C Les signaux - workboot","isPartOf":{"@id":"https:\/\/workboot.fr\/ciela\/#website"},"datePublished":"2025-07-30T13:47:25+00:00","dateModified":"2025-08-01T09:05:15+00:00","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/workboot.fr\/ciela\/gestion-des-signaux-en-c\/"]}]},{"@type":"WebSite","@id":"https:\/\/workboot.fr\/ciela\/#website","url":"https:\/\/workboot.fr\/ciela\/","name":"workboot","description":"Open Source, Open Minds ","publisher":{"@id":"https:\/\/workboot.fr\/ciela\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/workboot.fr\/ciela\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/workboot.fr\/ciela\/#organization","name":"workboot","url":"https:\/\/workboot.fr\/ciela\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/","url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","contentUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","width":1024,"height":950,"caption":"workboot"},"image":{"@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"\ud83d\udd52 : 3 h maximum Pr\u00e9requis: Langage C But R\u00e9pertoire du travail: ~\/Works\/TP_C_Signaux Exercice 1_0 : Capture de SIGINT (Ctrl+C) avec signal r\u00e9pertoire : ex1, code ex1.c But&nbsp;: Emp\u00eacher Ctrl+C [&hellip;]","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=3347"}],"version-history":[{"count":39,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3347\/revisions"}],"predecessor-version":[{"id":3419,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3347\/revisions\/3419"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=3347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}