Ich suche nach verschiedenen Möglichkeiten, programmatisch einen bestimmten Prozess über seine Prozess-ID unter Windows XP anzuhalten und fortzusetzen.
Werkzeug zum Aussetzen / Wiederaufnehmen des Vorgangs tut dies mit SuspendThread
/ ResumeThread
, warnt jedoch vor Multi Thread-Programme und Deadlock-Probleme.
PsSuspend sieht gut aus, aber ich frage mich, ob es etwas spezielles über Deadlocks macht oder ein anderes verwendet Methode?
Bevorzugte Sprachen: C ++ / Python
Wenn Sie den Debugger "debuggen" (indem Sie zum Beispiel logger.exe
verwenden, um alle von windbg.exe
erstellten API-Aufrufe zu verfolgen), scheint der Debugger SuspendThread()
/ ResumeThread()
zu verwenden, um alle Threads in diesem Thread zu suspendieren der Prozess wird debuggt.
PsSuspend verwendet möglicherweise eine andere Methode zum Aussetzen von Prozessen (ich bin mir nicht sicher), aber es ist dennoch möglich, andere Prozesse aufzuhängen: Wenn der Prozess, den Sie suspendieren, ein freigegebenes Synchronisierungsobjekt enthält, das von einem anderen Prozess benötigt wird, Sie können diesen anderen Prozess daran hindern, irgendwelche Fortschritte zu machen. Wenn beide Programme gut geschrieben sind, sollten sie wiederhergestellt werden, wenn Sie die unterbrochene Version fortsetzen, aber nicht alle Programme sind gut geschrieben. Und wenn dies dazu führt, dass Ihr Programm, das das Suspendieren ausführt, hängen bleibt, haben Sie einen Deadlock.
Ich bin nicht sicher, ob das den Job erledigt, aber mit ProcessExplorer von MS Systernals können Sie einen Prozess aussetzen.
Es wurde gesagt: Ссылка und ich habe es auch dort gefunden.
Ich habe Ссылка auf einigen Softwares getestet:
es funktioniert gut.
PsSuspend und Pausep sind zwei gültige Optionen.
Ich denke, es gibt einen guten Grund, warum es in Windows keine SuspendProcess () -Funktion gibt. Eine solche Funktion öffnet die Tür für ein instabiles System. Sie dürfen einen Prozess nicht anhalten, es sei denn, Sie haben diesen Prozess selbst erstellt. Wenn Sie diesen Prozess selbst geschrieben haben, können Sie ein Ereignis (siehe :: SetEvent () usw. in MSDN) oder eine andere Art von Nachrichtenübertragung verwenden, um einen Pause-Befehl im Prozess auszulösen.
Tags und Links windows process process-management