Anwendung anhand eines ports terminieren?

Post Reply
Message
Author
Holger

Anwendung anhand eines ports terminieren?

#1 Post by Holger »

man kennt es ja:
killproc -TERM /usr/local/bin/xyz-app
somit kille ich alle prozesse dieser ausführbaren datei. doch wie ist es nun wenn ich eine anwendung anhand eines ports kilen will?
also statt pfadangabe, muss man den port reinschreiben oder so, den die anwendung die gekillt werden soll an sich gebunden hat!

danke an alle hilfe!

Jochen

Re: Anwendung anhand eines ports terminieren?

#2 Post by Jochen »

lsof erschlägt das Problem fast von alleine:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/bash
# Skript: killport
# Zweck: Killt Prozesse, die an einem bestimmten Port hängen
# Voraussetzungen:
# lsof

case $# in
0) echo "Nicht genügend Argumente." >&2
exit 1
;;
1) SIGNAL="-TERM"
PORT="$1"
;;
2) SIGNAL="$1"
PORT="$2"
;;
*) echo "Zuviel Argumente." >&2
exit 1
;;
esac

lsof -i :$PORT -t | xargs kill $SIGNAL

exit 0</font><hr></pre></blockquote>lsof gibt nur die PIDs aus (-t) von Prozessen, die am übergebenen Port hängen (-i :$PORT). Das darf sowohl in der numerischen als auch in der textuellen Angabe erfolgen, also sind sowohl "25" als auch "smtp" gültig. Aus den PIDs bastelt dann xargs nur noch ein passendes kill-Kommando zusammen.(Zum Testen kann man zwischen "xargs" und "kill" noch ein "echo" setzen, dann sieht man, welches Kommando xargs zusammenbaut, ohne dass es ausgeführt wird.) Das case-Statement vorher ist nur dafür da, die übergebenen Parameter von der Anzahl her zu testen. Hier kann man das Skript auch noch etwas ausbauen, beispielsweise mit einer Usage-Meldung oder einer tiefergehenden Überprüfung der Parameter oder mit der Möglichkeit, mehr als nur einen Port zu übergeben usw.

Jochen

vi-vi

Re: Anwendung anhand eines ports terminieren?

#3 Post by vi-vi »

Hallo Holger

mir ist momentan nicht so richtig klar was Du damit bezweckst. An deiner stelle würde ich ewentuell mal über einen Packetfilter und/oder Proxy (für die Anwendungsschicht ) nachdenken. Das funktioniert von Außen und auch von Innen. Vieleicht solltest Du dir auch mal den Befehl "skill" ansehen mit ihm kannst Du z.B. Terminals (tty oder pty) oder User (komplett) usw killen.

mdMmDs vi-vi

Holger

Re: Anwendung anhand eines ports terminieren?

#4 Post by Holger »

es eght darum, das ich ein webinterface schreiben will, was ein programm (spezifisch HLDS Half-Life-Dedicated-Server) steuern soll. nun muss ich (da es ja sein kann das ich MEHRERE HLDS-Server mit verschiedenen ports habe) nur EINES dieser Programme anhand des PORTS terminieren. ich denke mit dem obigen script kommt man gut zu recht ... gibt es noch bessere (bzw. einfachere) methoden???

Jochen

Re: Anwendung anhand eines ports terminieren?

#5 Post by Jochen »

Kenne den HLDS nicht weiter. Aber häufig schreiben Linux-Dienste ihre PID in eine Datei unter /var/run. Notfalls müsste man ein Startskript basteln, welches diese Aufgabe übernimmt. Abschiessen liessen sich die Server dann über ein "kill `cat /var/run/HLDS-<i>X</i>.pid`", mit X als einer eindeutigen Kennung für den Server. Das sollte man dann allerdings auch in das Kript packen und danach das .pid-File löschen.

Jochen

Holger

Re: Anwendung anhand eines ports terminieren?

#6 Post by Holger »

nun HLDS ist ein auf der GDB basienden routinen, welches sich einen von mir angewiesenen port krallt. kannst du mir ein beispiel geben WIE man die PID in die PID-FILE schreibt? das würde nähmlich ein sehr guter ausweg sein, um anzeigen zu lassen, welcher server LÄUFT und welcher nicht (je nachdem er eine PID hat oder eben nicht!).
danke aber erstmal an alle die bis hierher geholfen haben. hr habt mich echt ein grosses stück weitergebracht :)))

Post Reply