Bonjour,
j'ai un script bash qui lance en batch une commande pipée vers une autre.
Comment puis-je tuer les deux?
En essayant de récupérer le PID avec $!, je ne tue que la "moitié" du batch: à la fin (s'il ne doit en rester qu'un...), il reste toujours le "tail" :-(
J'ai essayé avec différents signaux (kill, hup, term).
Voici un exemple simplifié (juste pour tester le comportement du $! et du kill).
Si quelqu'un a une solution, je suis preneur!
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
32
33
34
35
36
37
38 #!/bin/bash # -*- coding: latin-1 -*- myloop() { while true ; do sleep 1 ; done } clean_all() { echo "Killing BANG_PID: kill -${MY_KILL} ${BANG_PID}" kill -${MY_KILL} ${BANG_PID} echo "" ps -ef | egrep --color=tty "(${CMD}| ${MY_PID} | ${BANG_PID}) " } CMD=$(basename $0) MY_PID=$$ echo "MY_PID ${MY_PID}" TMP_FILE=${1:-/tmp/toto} touch ${TMP_FILE} MY_KILL=${2:-KILL} tail -F ${TMP_FILE} | myloop & BANG_PID=$! echo "BANG_PID ${BANG_PID}" echo "" # ---------------------------------------------------------------- # Catch the C-c interrupt signal trap "echo trap; clean_all; exit" 1 2 15 while true ; do ps -ef | egrep --color=tty "(${CMD}| tail | ${MY_PID} | ${BANG_PID}) " echo "" sleep 5; done
Merci d'avance
)jack(
Partager