Wie wird ein externer Prozess unter Windows angehalten / fortgesetzt?

8

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

    
MechanTOurS 19.09.2008, 08:26
quelle

5 Antworten

5

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.

    
bk1e 19.09.2008 14:22
quelle
2

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.

    
Highmastdon 04.05.2012 12:17
quelle
2

lesen Sie hier und Sie haben auch psutil für Python dass du es so benutzen kannst:

%Vor%     
Hanan N. 27.12.2012 11:27
quelle
1

Ich habe Ссылка auf einigen Softwares getestet:

es funktioniert gut.

PsSuspend und Pausep sind zwei gültige Optionen.

    
MechanTOurS 20.11.2008 07:25
quelle
0

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.

    
Andre 19.09.2008 11:46
quelle