Wie pause / resume jeden externen Prozess unter Windows?
Ich bin auf der Suche nach verschiedenen Möglichkeiten zum pausieren und fortsetzen der programmgesteuert einen bestimmten Prozess, über dessen Prozess-ID unter Windows XP.
Prozess suspend/resume-tool tut es mit SuspendThread
/ResumeThread
aber warnt davor, über multi-threaded Programme und deadlock-Probleme.
PsSuspend sieht okay aus, aber ich Frage mich, ob es etwas besonderes über deadlocks oder verwendet eine andere Methode?
Bevorzugte Programmiersprachen : C++ /Python
- Ein SEO-Kommentar folgt: PsSuspend sieht aus wie ein windows entspricht der Linux - /UNIX -
kill -SIGSTOP
oderkill -SIGCONT
(und auchkillall
).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie "debug-debugger" (zum Beispiel mittels
logger.exe
zu verfolgen alle API-Aufrufe vonwindbg.exe
), es scheint, dass der debugger verwendetSuspendThread()
/ResumeThread()
zu unterbrechen aller threads in der Prozess gedebuggt wird.PsSuspend eine andere Möglichkeit der Aussetzung der Prozesse (ich bin mir nicht sicher), aber es ist immer noch möglich, hängen von anderen Prozessen: wenn der Prozess Sie anhalten hält eine gemeinsame Synchronisations-Objekt, das benötigt wird von einem anderen Prozess, Sie können blockieren, den andere Prozess aus macht keine Fortschritte. Wenn beide Programme sind gut geschrieben, Sie sollten sich erholen, wenn Sie wieder die, die Sie ausgesetzt, aber nicht alle Programme sind gut geschrieben. Und wenn dies bewirkt, dass Ihr Programm, das die Aussetzung zu hängen, dann hast du einen deadlock.
Ich bin mir nicht sicher, ob dies macht den job, aber mit ProcessExplorer von MS Systernals kann man suspendieren eines Prozesses.
Es wurde hier gesagt: https://superuser.com/a/155263 und ich fand es dort auch.
Lesen hier und Sie haben auch für python-psutil, dass Sie können es verwenden, wie:
Getestet habe ich http://www.codeproject.com/KB/threads/pausep.aspx auf wenige Software:
funktioniert es einwandfrei.
PsSuspend und Pausep sind zwei gültigen Optionen.
Ich denke, es gibt einen guten Grund, warum es keine SuspendProcess () - Funktion in Windows. Mit solch einer Funktion öffnet die Tür zu einem instabilen system. Sie werden nicht zur Aussetzung eines Prozesses, es sei denn, Sie den Prozess selbst.
Wenn Sie schrieb, dass der Prozess sich selbst, Sie könnten einen event (siehe ::SetEvent() etc. in MSDN) oder andere Art von messaging-trigger einen Befehl pause in den Prozess.