AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozesshandles

Ein Thema von tk_tommy · begonnen am 22. Feb 2013 · letzter Beitrag vom 22. Feb 2013
Antwort Antwort
tk_tommy

Registriert seit: 13. Feb 2005
Ort: Oldenburg
1 Beiträge
 
#1

Prozesshandles

  Alt 22. Feb 2013, 14:44
HI!

Ich habe folgendes Problem.

- Ich starte aus meinem Programm heraus ein anderes Programm mit CreateProcess.
- Die Prozess-ID wird gesichert.
- Nach einiger Zeit wird der Prozess von mir beendet. (Terminate)
- Im Win7-Taskmanager werden aber ständig die Handles hochgezählt.
Nach einigen Stunden habe ich bereits über 2000 Handles.

Code-Ausschnitt
- Prozess erstellen

if(CreateProcess(Nil,pchar(pProgramName + ' ' + uebergabe),nil,nil,false,NORMAL_PRIORITY_CLASS,nil ,nil,StartupInfo,ProcessInfo) = true) then begin;
GetExitCodeProcess(ProcessInfo.hProcess,exestatus) ;
if(exestatus = STATUS_PENDING) then begin;
vResult := ProcessInfo.hProcess;
ThreadId := ProcessInfo.hThread;
pdwProcessId := ProcessInfo.dwProcessId;
end;
end;


- Prozess beenden

procid := OpenProcess(PROCESS_TERMINATE, false, strtoint(pid));
if(procid <> 0) then begin;
// ExitCode laden
GetExitCodeProcess(procid,processstatus);
// Prozess beenden
if(terminateprocess(procid,processstatus) = true) then begin;
try closehandle(procid); except end;
status := true;
end
end;


- Prozess prüfen

procid := OpenProcess(PROCESS_TERMINATE, false, strtoint(pid));
if(procid <> 0) then begin;
status := true;
end;



Wenn ich nach Beendigung des Prozesses prüfe, ob der Prozess noch läuft, wird der beendete Prozess gefunden????


Wie kann ich das verhindern? / Wo liegt der Fehler


Grüße Tommy
Let me show you the World with my Eyes
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Prozesshandles

  Alt 22. Feb 2013, 15:06
Delphi-Quellcode:
 // - Prozess prüfen

        procid := OpenProcess(PROCESS_TERMINATE, false, strtoint(pid));
        if(procid <> 0) then begin;
          status := true;
        end;
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Zitat von MSDN:
The handle returned by the OpenProcess function can be used in any function that requires a handle to a process, such as the wait functions, provided the appropriate access rights were requested.

When you are finished with the handle, be sure to close it using the CloseHandle function.

Geändert von TiGü (22. Feb 2013 um 15:25 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prozesshandles

  Alt 22. Feb 2013, 15:07
Doppelpost

Geändert von TiGü (22. Feb 2013 um 15:24 Uhr) Grund: Doppelpost
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#4

AW: Prozesshandles

  Alt 22. Feb 2013, 16:02
Wo liegt der Fehler
Auch wenn du dir Frage sicher anders gemeint hast, so fallen mir sofort einige Fehler auf:
  • Boolesche Prüfung auf True
  • Fehlende Code-Tags. Ich frag mich immer wieder, warum die nicht genutzt werden - woran liegt das?

Zum eigentlichen Problem des Themas kann ich mich TiGü nur anschließen: Zu jedem OpenProcess() gehört ein CloseHandle().

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz