2009-11-10 4 views
7

Ich habe Prozess-ID in einer Datei "pid" Ich möchte es töten.Linux-Shell: Wie Befehlsargument aus einer Datei lesen?

Etwas wie:

kill -9 <read pid from file> 

Ich habe versucht:

kill -9 `more pid` 

aber es funktioniert nicht. Ich habe auch versucht xargs, aber ich kann nicht meinen Kopf herum.

+0

antwortet ich denke, es das 'more' Bit ist, dass es b/c' more' Eingang könnte erwarten Benutzer tötet. – BCS

+0

http://www.speculation.org/garrick/kill-9.html –

Antwort

12

Lassen Sie mich zusammenfassen alle

kill -9 $(cat pid) 
kill -9 `cat pid` 
cat pid | xargs kill -9 
13

Does

kill -9 $(cat pid) 

Arbeit für Sie?

+1

+1. Ich bevorzuge die $() -Methode gegenüber Backticks, da Sie sie verschachteln können. – paxdiablo

3

meine Präferenz ist

kill -9 `cat pid` 

, die in den Backticks für jeden Befehl funktioniert.

2

kill -9 $(cat pid) oder cat pid | xargs kill -9 werden beide arbeiten

2

Sie sollen nach und nach Anfahren und dann auf die schweren Sachen bewegen, den Prozess zu töten, wenn sie nicht gut spielen wollen.

Ein Signal SIGKILL (-9) kann nicht abgefangen werden, und das bedeutet, dass Ressourcen, die vom Prozess gehalten werden, nicht bereinigt werden.

Versuchen Sie zuerst, eine Kill SIGTERM (-15) zu verwenden, und prüfen Sie dann noch, ob der Prozess vorhanden ist, indem Sie eine Kill-0 $ (cat pid) ausführen. Wenn es immer noch herumhängt, dann klimpern Sie es mit -9.

SIGTERM kann von einem Prozess abgefangen werden und jeder ordnungsgemäß geschriebene Prozess sollte über einen Signalhandler verfügen, um das SIGTERM abzufangen und anschließend seine Ressourcen zu bereinigen, bevor es beendet wird.

+0

Beachten Sie, dass Sie 'kill -s TERM' anstelle von' kill -15' übergeben können. – jpaugh