6
votes

Suspension de l'exécution d'un processus distant (C, Windows)

Je peux suspendre un fil d'un autre processus en utilisant de la suspension (). Existe-t-il un moyen de suspendre l'exécution de ce processus complètement? Si oui, veuillez poster le code.

Merci.

PS: Depuis que vous allez demander "Pourquoi voulez-vous faire cela" Je posterai ici ici. Je traite avec un logiciel hérité qui n'est plus maintenu. Je n'ai pas accès au code source. En ce moment, j'en ai besoin de faire une pause jusqu'à ce qu'un fichier soit rempli de données puis de reprendre l'exécution.


0 commentaires

3 Réponses :


2
votes

Le seul moyen est de suspendre tous les filets de ce processus.

Si vous souhaitez voir le code réel, consultez l'exemple ici .


4 commentaires

cela pourrait-il suspendre le processus lui-même? J'ai essayé de suspendre tout le fil mais le processus principal est toujours actif.


Un processus comprend un ou plusieurs threads qui exécutent réellement le code dans le processus (techniquement, les processus ne fonctionnent pas, les threads le font).


Super. Merci pour l'explication


Si vous lisez cet article sur CodeProject, notez que «certains programmes ne sont pas bien écrits» incluent de nombreux programmes bien écrits qui utilisent un mutex de manière entièrement légitime. La suspension est toujours un peu risquée et gênante (bien que pour votre exemple particulier, il est probablement difficile de trouver quelque chose de bien meilleur).



0
votes

> Le seul moyen est de suspendre tous les filets de ce processus.

non.
Utilisez des API de noyau non documenté (exportés depuis NT 3.1) pour suspendre le PID.


1 commentaires

Merci pour les commentaires, mais simplement dire «utiliser une API sans papiers» ne me donnera aucune réponse. Si vous connaissez une API sans papiers, veuillez le poster et donner un exemple de code.



0
votes

Si le processus a ou reproduit de nombreux fils rapidement ou de manière asynchrone, votre sujet à une condition de course avec suspension ().

Un moyen d'accomplir la même chose (processus large) consiste à joindre comme un débogueur au processus cible avec DebugActiveProcess () Appelez simplement debugbreakprocess . Lorsqu'un processus est à un point de rupture, aucun nouveau threads ne sera créé et toutes les exécutions, Process Large s'arrêtera.


0 commentaires