2013-03-06 9 views

Antwort

2

Sie können auf Hintergrundjobs in Ihrem aktuellen Shell mit den %1, %2, ... idioms verweisen.

Meines Wissens gibt es nicht so etwas wie einen Haken alle; Es gibt keine %* oder ein Äquivalent.

Aber Sie Verknüpfung könnte mit

kill %1 %2 %3 %4 %5 %6 %7 %8 

, die die ersten acht Hintergrundprozesse noch läuft in der aktuellen Shell töten würde. Das kann oder darf nicht ein tail sein.

Seien Sie vorsichtig, den du ;-)

töten Wenn Sie diese volle Kontrolle über die Hintergrundprozesse haben könnte eine sichere Wette für Sie sein. Da Sie erwähnen, dass Sie dies von einem Shell-Skript tun wollen, und wenn die tail s die einzigen Hintergrundprozesse sind, dann ist dies einfach. Stellen Sie nur sicher, dass Ihr Shell-Skript eine Subshell startet, so dass es niemals die Hintergrundprozesse einer interaktiven Shell beeinflusst. Zum Beispiel könnten Sie Ihr Skript mit

#!/usr/bin/bash 

starten und Ausführungsberechtigungsbits für das Skript festlegen und das Skript immer namentlich aufrufen. Mit anderen Worten, sollten Sie nicht source script_file dass Skript.

Auf der anderen Seite jim's answer zu speichern die PIDs (Prozess-IDs) von jedem Prozess, den Sie starten, ist eine viel sicherere Möglichkeit, andere Prozesse zu töten.

+0

ist dies wahrscheinlich die sicherere einfache opt .. Nochmals vielen Dank – doapydave

5

killall tail sollte es tun, aber es schließt auch alle anderen Prozesse Schwanz Sie laufen haben.

7

Sie können alle Befehle Schwanz töten, indem sie killall tail

+1

das ist die Antwort, die ich für war hopin! – doapydave

+0

Das ist es. Simpel und einfach. – Guus

1

"erinnern", das Kind pids.

tail -f logfile1 & 
pid1=$! 

tail -f logfile2 & 
pid2=$! 

kill $pid1 $pid2 

Offensichtlich würden Sie nicht sofort töten wie das in Ihrem realen Skript ausgeben. Sie würden wahrscheinlich lieber auf die Child-Prozesse warten. Aber das tut, was Sie gefragt haben

+0

genial Dank :) – doapydave