¿Cómo pausar/reanudar cualquier proceso externo en Windows?
process process-management (5)
Creo que hay una buena razón por la cual no hay una función SuspendProcess () en Windows. Tener esa función abre la puerta a un sistema inestable. No deberá suspender un proceso a menos que haya creado ese proceso usted mismo. Si usted mismo escribió ese proceso, podría usar un evento (vea :: SetEvent () etc. en MSDN) u otro tipo de mensaje para activar un comando de pausa en el proceso.
Estoy buscando diferentes formas de detener y reanudar programáticamente un proceso en particular a través de su ID de proceso en Windows XP.
La herramienta de suspensión / reanudación del proceso lo hace con SuspendThread
/ ResumeThread
pero advierte sobre programas de subprocesos múltiples y problemas de interbloqueo.
PsSuspend se ve bien, pero me pregunto si hace algo especial acerca de los bloqueos o usa otro método.
Idiomas preferidos: C ++ / Python
Si "depura el depurador" (por ejemplo, usando logger.exe
para rastrear todas las llamadas a API realizadas por windbg.exe
), parece que el depurador usa SuspendThread()
/ ResumeThread()
para suspender todos los hilos en el proceso. depurado
PsSuspend puede usar una forma diferente de suspender procesos (no estoy seguro), pero aún es posible bloquear otros procesos: si el proceso que está suspendiendo contiene un objeto de sincronización compartido que necesita otro proceso, puede bloquear ese otro proceso de hacer cualquier progreso. Si ambos programas están bien escritos, deberían recuperarse cuando reanude el que suspendió, pero no todos los programas están bien escritos. Y si esto hace que su programa que está suspendiendo cuelgue, entonces tiene un punto muerto.
Probé http://www.codeproject.com/KB/threads/pausep.aspx en algunos softwares:
funciona bien.
PsSuspend y Pausep son dos opciones válidas.
No estoy seguro de si esto hace el trabajo, pero con ProcessExplorer de MS Systernals puede suspender un proceso.
Se ha dicho aquí: https://superuser.com/a/155263 y lo encontré allí también.
lea aquí y también tiene psutil para python que puede usarlo así:
>>> import psutil
>>> pid = 7012
>>> p = psutil.Process(pid)
>>> p.suspend()
>>> p.resume()