2012-04-08 4 views
1

Zur Zeit habe ich die klare alle Prozesse folgenden läuft auf PortWie kann ich einen Prozess finden und es in einem Skript einzelne bash töten

lsof -i :10000 

und ich

COMMAND  PID   USER FD TYPE  DEVICE SIZE/OFF NODE NAME 
Google 10427   user 60u IPv4 0x162adea8  0t0 TCP localhost:52478->localhost:ndmp (ESTABLISHED) 
Google 10427   user 112u IPv4 0x16289b98  0t0 TCP localhost:52483->localhost:ndmp (ESTABLISHED) 

Dann töte ich es

kill 10427 

Ich bin auf der Suche nach einer Möglichkeit, den oben genannten Prozess zu rationalisieren. Ich vermute, dass die Lösung damit zu tun hat, die Ausgabe zu leiten und sie zu töten. Etwas wie (ich denke, hier nehme ich an, dass $ 1 10427 ist).

Ich habe nicht zu viel Bash Scripting getan, also wäre jede Hilfe großartig.

Antwort

4

Ich glaube, Sie wollen so etwas wie

fuser -k -n tcp 10000 

lsof soultion mehr sein würde wie

lsof -i :10000|tail -n +2|awk '{print $2}'|xargs -r kill 
+0

Danke, ich habe es funktioniert. Ich bin auf OSX, und XARGS haben anscheinend keine Option -r (Ich habe die Manpage [man] (http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages) überprüft /man1/xargs.1.html)), hätte das erwähnen sollen. Der Befehl funktioniert auch ohne -r. Würde es dir etwas ausmachen, mir zu sagen, was das -r macht? – elliance

+0

Das 'r'-Flag ist für GNU-xargs und bedeutet, dass der Befehl NICHT ausgeführt werden sollte, wenn stdin leer ist (d. H., Führen Sie kill nicht aus, wenn awk nichts ausgibt). –

+0

Danke, @ EmilVikström, und ja, stock osx xargs akzeptiert '-r' nicht, obwohl, wenn Sie Macports haben, Sie' gxargs' (wahrscheinlich 'findutils' Port) verwenden können. Auch osx 'Fixierer' wird wahrscheinlich nicht ausreichen. –

1

denke ich Michaels Antwort der schönste ist, aber nur als Referenz, können Sie etwas tun, wie gut:

PID=`lsof -i :10000 | awk 'NR == 2 {print $2}'` 
kill $PID 
+0

err ... das würde versuchen, 'PID' zu töten. Es ist 'tail', nicht' head' was du machen wolltest ;-) –

+0

oops, nicht 'PID',' COMMAND'. Weil es $ 2 ist. –

+0

Ich weiß, ich sollte mich nicht in SO einloggen, wenn ich gerade aus dem Bett komme ...: -/ –

1

Oder verwenden Sie diese!

kill $(lsof -i :www | awk '{print $2}' | grep -v PID) 
Verwandte Themen