Projekt

Allgemein

Profil

Fehler #614 » pipe_test.sh

Maximilian Seesslen, 25.02.2025 18:19

 
1
#!/bin/bash
2

    
3
# * "a || b" disables "-e" and is not reactivatable
4
# * forking removes traps
5
# * Signals are not handled while "sleep"
6

    
7
set -e
8
set -u
9

    
10
error=0
11
pidArray=()
12

    
13
mainTrap()
14
{
15
    echo "### Main: something happened"
16
    # return 0
17
}
18

    
19
failTrap()
20
{
21
    sta=$?
22
    if [ "$$" != "$BASHPID" ]; then
23
       echo $sta > return_$BASHPID
24
       error=1
25
	kill -s SIGINT $$
26
       #echo $
27
       #echo "TRAP $sta; $$; $BASHPID"
28
    else
29
	#echo "MAIN"
30
	echo "Trap in main process? I don't think so!"
31
	exit 22
32
    fi
33
}
34

    
35
fail()
36
{
37
    # set -e
38
    # trap failTrap EXIT
39
    echo A2.1
40
    gcc
41
    # return 22
42
    echo A2.2
43
    return 22
44
}
45

    
46
fail2()
47
{
48
    # set -e
49
    # trap failTrap EXIT
50
    echo A3.1
51
    sleep 5
52
    exit 22
53
    # return 22
54
    echo A3.2
55
    return 22
56
}
57

    
58
semiSucceed()
59
{
60
    return -5000
61
}
62

    
63
succeed()
64
{
65
    # set -e
66
    echo A2.1 S
67
    semiSucceed
68
    echo A2.2 S
69
    return 0
70
}
71

    
72
runLogged()
73
{
74
    trap failTrap EXIT
75
    $@ &> $BASHPID.log
76
}
77

    
78
sta=0
79

    
80
echo "Start: $$; $BASHPID"
81

    
82
trap -- mainTrap SIGINT
83

    
84
echo "A"
85
# fail || sta=1
86
runLogged fail &
87
subPid=$!
88
pidArray+=( $subPid )
89
echo "Forked: $subPid"
90

    
91
runLogged succeed &
92
subPid=$!
93
pidArray+=( $subPid )
94
echo "Forked: $subPid"
95

    
96
runLogged fail2 &
97
subPid=$!
98
pidArray+=( $subPid )
99
echo "Forked: $subPid"
100

    
101
echo "----------------------------------------"
102
wait
103

    
104
for pid in ${pidArray[*]}; do
105
    echo
106
    echo
107
    echo "CHECK $pid"
108
    ret=$(cat return_$pid)
109
    if [ "$ret" != "0" ]; then
110
	echo "$pid: Error $ret"
111
	echo "log:"
112
	cat $pid.log
113
    else
114
	echo "$pid: OK"
115
	echo "log:"
116
	cat $pid.log
117
    fi
118
done
119

    
120
echo
121

    
122
echo "B: $sta / $error"
123

    
124
echo "Fin."
125

    
126
sleep 0.5
127
echo "(B: $sta / $error)"
128

    
129

    
130
#---fin------------------------------------------------------------------------
(4-4/5)