Bonjour,
J'ai un petit soucis avec le signal SIGCHLD et je comprend pas d'ou ça vient
Le programme que je lance est tout simple:
Le shell vars.sh ressemble à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <stdio.h> #include <unistd.h> #include <signal.h> static int test(); int main(int argc, char *argv[]) { test(); usleep(5000000); } static int test() { int ret; int localPid = 0; char *envp2[] = { 0 }; char *argv2[] = { "/tmp/scripts/vars.sh", NULL }; localPid = fork(); if (localPid != 0) { return 0; } else { signal(SIGCHLD, SIG_IGN); execve("/tmp/scripts/vars.sh", argv2, envp2); _exit (0); } }
Mon problème c'est qu'en retour du 'su' j'optiens pas le code 0.#!/bin/sh
set -x
env
su - toto -c "sleep 1"
ERR=$?
echo $ERR
Par contre, lorsque j'enlève le signal ou je que je défini une fonction pour traité ce signal comme ceci:+ env
PWD=/root/pascal/scripts
SHLVL=1
_=/bin/env
+ su - toto -c 'sleep 1'
+ ERR=223
+ echo 223
223
J'ai bien le code 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 .... signal(SIGCHLD, titi); .... void titi(int sig) { return; } ...
Savez-vous pourquoi dans le premier cas j'optiens pas le code 0 alors qu'avec SIG_IGN on est censé ignoré le signal?+ env
PWD=/root/pascal/scripts
SHLVL=1
_=/bin/env
+ su - toto -c 'sleep 1'
+ ERR=0
+ echo 0
0
Merci pour votre aide
Partager