Screen kann man nicht killen wieso nicht?

Bash, Shell, PHP, Python, Perl, CGI
teklab
Posts: 17
Joined: 2004-05-04 08:37

Screen kann man nicht killen wieso nicht?

Post by teklab » 2006-02-05 22:21

Hallo also
ich starte ein Programm egal welches z.B. CS mit

screen -A -m -d -S serv17 ./hlds...startparameter

Der Screen läuft das Programm auch aber nun habe
ich ein stopskript welches das Programm wieder beendet
auf 20 anderen Server funktioniert es problemlos, habe
es bei Freunden getestet nur bei dem einen Debian Server
geht es nicht. Hier das Skript:

Code: Select all

#! /bin/sh

kill `ps aux | grep -v grep | grep -i screen | grep -i serv17 | awk '{print $2}'`
Bitte kann wer helfen?

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Screen kann man nicht killen wieso nicht?

Post by Roger Wilco » 2006-02-06 00:37

Schau dir die Ausgabe von

Code: Select all

ps aux | grep -v grep | grep -i screen | grep -i serv17 | awk '{print $2}'
an. Das sollte die PID des entsprechenden Prozesses ausgeben. Wenn es das nicht tut, entsprechend anpassen oder gleich alles wegwerfen und pkill benutzen. ;)
Am Elegantesten wäre es natürlich, die PID des Prozesses in eine Datei zu schreiben. Das müsste der hlds aber ggf. selbst unterstützen.

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Screen kann man nicht killen wieso nicht?

Post by isotopp » 2006-02-06 05:04

teklab wrote:

Code: Select all

kill `ps aux | grep -v grep | grep -i screen | grep -i serv17 | awk '{print $2}'`
ps aux listet Deine ganze Prozeßliste.
grep -v grep filtert die Ausgabe von "ps aux" um den "grep"-Prozeß, der auf jedenfall da drin ist.
grep -i screen sucht alle Vorkommen von "screen" in der Ausgabe von ps.
grep -i serv17 sucht alle Vorkommen von "serv17" in der Restausgabe.
awk so wie dort angewendet druckt dann die PID (Feld 2) in der Restausgabe.

Die Backticks ersetzen das ps ... awk-Kommando durch seine Ausgabe (eine PID).

kill sendet ein Signal, hier ein TERM-Signal, Nummer 15, Default an diese PID (die von screen serv17).

screen ignoriert ein TERM Signal. Verwendet ein anderes Signal.

Außerdem ein kleiner Trick: "grep -i [s]creen" statt "grep -v grep | grep -i screen" (Warum funktioniert das? :) )

Außerdem ein Hinweis: man skill, man pkill.