Jak skrypt bash może zrobić odpowiednik Ctrl-C do zadania w tle?
Czy jest jakiś sposób na wywołanie podprocesu, tak aby on i wszyscy jego potomkowie otrzymali przerwanie, tak jak w przypadku Ctrl-C zadania na pierwszym planie? Próbuję zabić skrypt uruchamiający, który wywołuje długo działające dziecko. Próbowałemkill -SIGINT $child
(który nie wysyła przerwania do jego potomków, więc jest to no-op) ikill -SIGINT -$child
(który działa, gdy jest wywoływany interaktywnie, ale nie podczas uruchamiania w skrypcie).
Oto skrypt testowy. Długo działający skrypt totest.sh --child
. Kiedy zadzwonisztest.sh --parent
, przywołujetest.sh --child &
a następnie próbuje go zabić. Jak mogę sprawić, by rodzic zabił dziecko z powodzeniem?
#!/bin/bash
if [ "$1" = "--child" ]; then
sleep 1000
elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)
else
echo "Must be invoked with --child or --parent."
fi
Wiem, że możesz zmodyfikować długo działające dzieckotrap
sygnały, wyślij je do swojego podprocesu, a następnie poczekaj (odSkrypt Bash zabija tło (wielkie) dzieci w Ctrl + C), ale czy jest jakiś sposób bez modyfikowania skryptu potomnego?