AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Killen eines hängenden Prozessesn [Prozess reagiert nicht]
Thema durchsuchen
Ansicht
Themen-Optionen

Killen eines hängenden Prozessesn [Prozess reagiert nicht]

Offene Frage von "Basti1991"
Ein Thema von Basti1991 · begonnen am 25. Sep 2009 · letzter Beitrag vom 29. Sep 2009
Antwort Antwort
Basti1991

Registriert seit: 15. Jul 2007
7 Beiträge
 
#1

Killen eines hängenden Prozessesn [Prozess reagiert nicht]

  Alt 25. Sep 2009, 17:38
Hallo Zusammen,

ich schreibe zur Zeit ein Programm, dass PDFs zu SWF Konvertieren soll. Es nutzt dazu das Programm FlashPrinter von Adobe. Im Prinzip läuft es so ab:

Dateiliste erstellen -> Datei aus liste nehmen -> FlashPrinter starten und warten (maximal 20 Minuten) -> Fertig? -> Nächste Datei
|
|
---> Prozess hängt? ( > 20 Mins) -> Prozess killen und nächste Datei


Klappt ja alles Kundebar, nur dass Killen klappt nicht...ich nutze zur Zeit das hier zum killen:

Delphi-Quellcode:
KillProcess(PID: DWord): Bool;
var
  hProcess: THandle;
begin
  hProcess := OpenProcess(PROCESS_TERMINATE, False, PID);
  Result := TerminateProcess(hProcess, 0);
end;
Delphi-Quellcode:
GetProcessID(Exename: string): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
Delphi-Quellcode:
ProcessExists(ExeName: String): Boolean;
var
  I: Integer;
  hSnap: THandle;
  ProcEntry: TProcessEntry32;
  s: String;
  ProcList: TStringList;
begin
  ProcList := TStringList.Create;

  ProcList.BeginUpdate;
  ProcList.Clear;
  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnap <> INVALID_HANDLE_VALUE) then
  begin
    ProcEntry.dwSize := SizeOf(ProcessEntry32);
    if (Process32First(hSnap, ProcEntry)) then
    begin
      s := ExtractFileName(ProcEntry.szExeFile);
      proclist.Add(s);
      while Process32Next(hSnap, ProcEntry) do
      begin
        s := ExtractFileName(ProcEntry.szExeFile);
        proclist.Add(s);
      end;
    end;
  end;
  CloseHandle(hSnap);
  ProcList.EndUpdate;

  if (ProcList.IndexOf(ExtractFileName(ExeName)) > 0) then
    result := true
  else
    result := false;
  ProcList.Destroy;
end;

Delphi-Quellcode:
  App = 'FlashPrinter2.exe';
  while ProcessExists(App) do
  begin
    sleep(5000);
    KillProcess(GetProcessID(App));
  end;
also wird solange der Kill Befehl alle 5 Sekunden aufgerufen, bis der Prozess nachgibt..nur tut er das nie..mein Programm hängt sich quasi mit auf, wenn der Flashprinter streikt.

Gibt es eine möglichkeit den hängenden FlashPrinter abzuschießen?
Wäre echt super, müsst halt gut klappen, weil ich hab da um die 45 000 PDFs zu konvertieren (ich Programmier das ja eigentlich nicht für mich selber, sondern für die Firma wo ich arbeite, da fallen so viele PDFs an...rechnerisch würde das Programm ca 8 Tage dauerlaufen..also suche ich ne Zuverlässige Lösung)...Und jezz bitte keine Scherze wie :

Zitat:
Zitat:
.also suche ich ne Zuverlässige Lösung
Dann nimm kein Windows
Auch wenn ich für Windows nicht meine Hand ins feuer lege: 1. So sind nunmal meine Vorgaben - man muss lernen damit zu arbeiten, was man bekommt, 2. Wenn mans richtig macht, kann man auch mit Windows was anfangen.

Wie auch immer - vielen Dank für eure Hilfe =)

Viele Grüße,
Sebastian
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 25. Sep 2009, 17:45
Hallo Basti1991,
Willkommen in der DP

Vermutlich arbeitet OpenProcess blockierend, hält also dein Program mso lange an, bis der FlashPrinter beendet ist. Du könntest diesen Aufruf in einen Thread auslagern.

und es heißt "aufgehängt", nicht "aufgehongen"

[edit]äh vergiss es...[/edit]
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 25. Sep 2009, 17:49
Wenn ein Prozess sich nicht aus der Prozessliste entfernt werden kann, dann liegt das an noch ausstehende IO-Operationen, die sich nicht beenden lassen (z.B. Interrupts). D.h. meist, dass ein Treiber schlecht programmiert wurde.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Basti1991

Registriert seit: 15. Jul 2007
7 Beiträge
 
#4

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 25. Sep 2009, 17:54
Zitat von NamenLozer:
Hallo Basti1991,
Willkommen in der DP

Vermutlich arbeitet OpenProcess blockierend, hält also dein Program mso lange an, bis der FlashPrinter beendet ist. Du könntest diesen Aufruf in einen Thread auslagern.

und es heißt "aufgehängt", nicht "aufgehongen"
Zu blockieren scheint er nicht, da mein Programm mir bei jedem killversuch nen output gibt..der wird dann wird das auch dauernd angezeigt...
  Mit Zitat antworten Zitat
Basti1991

Registriert seit: 15. Jul 2007
7 Beiträge
 
#5

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 25. Sep 2009, 17:56
sorry für den doppelpost.

Zitat von Dezipaitor:
Wenn ein Prozess sich nicht aus der Prozessliste entfernt werden kann, dann liegt das an noch ausstehende IO-Operationen, die sich nicht beenden lassen (z.B. Interrupts). D.h. meist, dass ein Treiber schlecht programmiert wurde.
macht sinn...es wird ja der flashprinter-treiber angesprochen...aber es muss doch einen weg geben, diesen flashprinter zu killen...

[edit]need help^^[/edit]
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 25. Sep 2009, 19:36
Wenn der Treiber keine Abbruchfunktion implementiert, dann wird die IO Operation wohl nicht abzubrechen sein.
Es gibt zwar noch die Funktionen wie CancelIO, aber ob diese helfen kann, kann ich nicht sagen.

Schau doch mal mit dem Process Monitor von SysInternals, warum es überhaupt zu einer Blockade kommt.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#7

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 28. Sep 2009, 08:03
Möglicherweise hilft es, #WinSysDir#\TaskKill.exe zu benutzen. Du kannst dabei, je nach Bedarf, eine Reihe unterschiedlicher Parameter angeben. Einfach mal in der Kommandozeile "TaskKill /?" eingeben...
Das Programm kannst du mit Hilfe von CreateProcess starten.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 28. Sep 2009, 18:34
kannst du das Programm eigentlich erfolgreich mit dem Taskmanager/Prozess-Explorer killen?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 29. Sep 2009, 11:46
Diese Programme kochen mit denselben Funktionen, wie alle anderen auch.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Basti1991

Registriert seit: 15. Jul 2007
7 Beiträge
 
#10

Re: Killen eines hängenden Prozessesn [Prozess reagiert nich

  Alt 29. Sep 2009, 17:06
Zitat von rollstuhlfahrer:
kannst du das Programm eigentlich erfolgreich mit dem Taskmanager/Prozess-Explorer killen?

Bernhard
Jop, mit dem Taskmanager, bzw Tskill klappt das ganze...wenn es auch schon mal einige Zeit dauert bsi das Programm gekillt ist...
  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 09:46 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