windows process process-management

¿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.



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()