C - Ein beliebiges Programm 'killen'

Wie kann ich in C ein Programm, von dem ich nur die Handlenummer habe, beenden? Wenn möglich sogar dann beenden, wenn es das gar nicht möchte, so wie der Taskmanager (Task beenden).

–Jan Vornberger

Hi Jan :sunglasses:

Das ist schwierig, weil ein laufendes Programm für sich eine abgeschlossene Einheit bildet und auf andere Programme normalerweise keinen Zugriff hat. Es ist Sache des Betriebssystems, den einzelnen Programmen Rechenzeit, Speicherplatz und die anderen Resourcen zuzuweisen.

Bei UNIX gibt es den kill-Befehl, mit dem du Prozesse beenden kannst, sofern du die Berechtigung dazu besitzt. Unter Windows gibt es das meines Wissens nach nicht, so dass es da unmöglich sein dürfte einen fremden Prozess zu killen …

cu Stefan.

Hi Stefan,

Bei UNIX gibt es den kill-Befehl, mit dem
du Prozesse beenden kannst, sofern du die
Berechtigung dazu besitzt. Unter Windows
gibt es das meines Wissens nach nicht, so
dass es da unmöglich sein dürfte einen
fremden Prozess zu killen …

Ich habe zwar wenig Ahnung von der Betriebssystemprogrammierung unter Windows, aber der Taskmanager ist doch wohl auch mit C geschrieben.

Ciao

Uwe

cu Stefan.

Wie kann ich in C ein Programm, von dem
ich nur die Handlenummer habe, beenden?
Wenn möglich sogar dann beenden, wenn es
das gar nicht möchte, so wie der
Taskmanager (Task beenden).

Zuerst ergibt sich die Frage, was Du fuer ein Handle hast.
Wenn es ein Prozess-Handle ist, dann verwende
TerminateProcess(hProcess, ExitCode);

TerminateProcess beendet den Prozess sofort. Da gehen nicht gespeicherte Daten meist verloren.

Einen haken hat das Ganze aber: das geht nur unter Win9x richtig. Unter Win NT wirst Du probleme mit der Berechtigung haben. Da kann nicht jedes beliebige Programm irgendwelche anderen Programme beenden (der Taskmanager hat in der hinsicht eine besondere Berechtigung).

Naeheres unter msdn.microsoft.com unter TerminateProcess.

Zuerst ergibt sich die Frage, was Du fuer
ein Handle hast.
Wenn es ein Prozess-Handle ist, dann […]

Das mit dem TerminateProcess kannte ich. Ich habe aber nur den Handle des (Haupt-)Fensters. Kann ich den irgendwie in einen Prozess-Handle umwandeln? (So in der Art: GetOwnerOfWindow)

Ein andere Frage: Was gibt man bei dem ExitCode an. Ich glaube das ist jetzt eine dumme Frage, aber ich programmiere selten mit der API und deswegen entfallen mir manchmal die Basics.

–Jan Vornberger

Hi Uwe :smile:

Sicher, aber der Task-Manager gehört zum Betriebssystem-Kern. Er ist sogar einer der wichtigsten Teile. Daher hat er vollen Zugriff auf alle Programme.

cu Stefan.

Ein andere Frage: Was gibt man bei dem
ExitCode an. Ich glaube das ist jetzt
eine dumme Frage, aber ich programmiere
selten mit der API und deswegen entfallen
mir manchmal die Basics.

Soweit ich weiss ist der Exitcode der Wert, den das Programm zurückgibt, wenn es beendet wird. (So war’s zumindest bei DOS)
An wen das Programm diesen Code gibt und wie man ihn in Windows ausliest, weiss ich leider nicht.