Wie kann bash-Skript tun, das äquivalent von Strg-C, um eine hintergrund-Aufgabe?

Gibt es eine Möglichkeit zum aufrufen einer Teilprozess, so dass er und alle seine Nachkommen gesendet werden, einen interrupt aus, als ob Sie Strg-C ein Vordergrund-task? Ich versuche zu töten launcher-Skript aufruft, die eine lang andauernde Kind. Ich habe versucht kill -SIGINT $child (die nicht senden zu unterbrechen, um Ihre Nachkommen, so ist ein no-op) kill -SIGINT -$child (was funktioniert, wenn Sie angerufen werden interaktiv, aber nicht, wenn die Ausführung in einem Skript).

Hier ist ein test-Skript. Die lang andauernde Skript ist test.sh --child. Wenn Sie anrufen test.sh --parent ruft es test.sh --child & und dann versucht, ihn zu töten. Wie kann ich die Eltern töten das Kind erfolgreich?

#!/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

Ich weiß, dass Sie ändern können, die lang andauernde Kind trap - Signale, schicken Sie diese an Ihre Teilprozess, und warten Sie dann (aus
Bash-Skript kill-hintergrund (grand)Kinder auf Strg+C), aber gibt es eine Möglichkeit, ohne änderung der Kind-Skript?

InformationsquelleAutor yonran | 2013-02-04
Schreibe einen Kommentar