begin process at 2010 09 04 13:11:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Aide et documentation

 > 

Comment suspendre un processus sous Windows en passant par ses threads ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment suspendre un processus sous Windows en passant par ses threads ?

jeudi 3 avril 2008 à 17:34:21 | Comment suspendre un processus sous Windows en passant par ses threads ?

ijneb11

Bonjour,

Je développe une application 3D en python qui fonctionne sous Linux ET sous Windows. Tout marche (à peu près) bien, excepté un point particulier sur les processus que je n'arrive pas à résoudre.

En fait, mon application a 2 processus (Process du module processing) dont un qui gère toute la partie GTK. Et comme GTK est relativement gourmant même quand il ne fait rien, je suspends le processus concerné quand je n'en ai pas besoin (réduire sa priorité n'est pas suffisant).

Sous Linux, aucun problème, mais sous Windows ... Après quelques recherches, j'ai découvert les modules win32api, win32process (et les autres win32). Je vois comment Démarrer/Arrêter processus et threads, suspendre/reprendre les threads. Mais je n'ai rien trouvé pour suspendre/reprendre un processus ! Mais, par exemple, ProcessExplorer le fait.

Donc, je continue mes recherches et la seule solution envisageable est de trouver tous les threads du processus (tout processus ayant au moins 1 thread) et de les suspendre.

D'où ma question : comment récupérer la liste des threads d'un processus ?

Merci d'avance pour votre aide
Benjamin
mercredi 16 avril 2008 à 21:14:51 | Re : Comment suspendre un processus sous Windows en passant par ses threads ?

beltegeuse

je sais pas si ca va t'aider mais j'ai trouver ça :
You could use WMI.

>>> from win32com.client import GetObject
>>> WMI = GetObject('winmgmts:')

Here is how to get the process list:

>>> processes = WMI.InstancesOf('Win32_Process')
>>> len(processes)
41
>>> [process.Properties_('Name').Value for process in processes] # get
the process names
[u'System Idle Process', u'System', u'SMSS.EXE', u'CSRSS.EXE',
u'WINLOGON.EXE', u'SERVICES.EXE', u'LSASS.EXE', u'SVCHOST.EXE',
u'SVCHOST.EXE', u'SVCHOST.EXE', u'SVCHOST.EXE', u'SPOOLSV.EXE',
u'ati2evxx.exe', u'BAsfIpM.exe', u'defwatch.exe', u'inetinfo.exe',
u'mdm.exe', u'rtvscan.exe', u'SCARDSVR.EXE', u'WLTRYSVC.EXE',
u'BCMWLTRY.EXE', u'EXPLORER.EXE', u'Apoint.exe', u'carpserv.exe',
u'atiptaxx.exe', u'quickset.exe', u'DSentry.exe', u'Directcd.exe',
u'vptray.exe', u'ApntEx.exe', u'FaxCtrl.exe', u'digstream.exe',
u'CTFMON.EXE', u'wuauclt.exe', u'IEXPLORE.EXE', u'Pythonwin.exe',
u'MMC.EXE', u'OUTLOOK.EXE', u'LineMgr.exe', u'SAPISVR.EXE',
u'WMIPRVSE.EXE']

Here is how to get a single process and get its PID.

>>> p = WMI.ExecQuery('select * from Win32_Process where
Name="Pythonwin.exe"')
>>> [prop.Name for prop in p[0].Properties_] # let's look at all the
process property names
[u'Caption', u'CommandLine', u'CreationClassName', u'CreationDate',
u'CSCreationClassName', u'CSName', u'Description', u'ExecutablePath',
u'ExecutionState', u'Handle', u'HandleCount', u'InstallDate',
u'KernelModeTime', u'MaximumWorkingSetSize', u'MinimumWorkingSetSize',
u'Name', u'OSCreationClassName', u'OSName', u'OtherOperationCount',
u'OtherTransferCount', u'PageFaults', u'PageFileUsage',
u'ParentProcessId', u'PeakPageFileUsage', u'PeakVirtualSize',
u'PeakWorkingSetSize', u'Priority', u'PrivatePageCount', u'ProcessId',
u'QuotaNonPagedPoolUsage', u'QuotaPagedPoolUsage',
u'QuotaPeakNonPagedPoolUsage', u'QuotaPeakPagedPoolUsage',
u'ReadOperationCount', u'ReadTransferCount', u'SessionId', u'Status',
u'TerminationDate', u'ThreadCount', u'UserModeTime', u'VirtualSize',
u'WindowsVersion', u'WorkingSetSize', u'WriteOperationCount',
u'WriteTransferCount']
>>> p[0].Properties_('ProcessId').Value # get our ProcessId
928

Apres n'étant pas expert en la matière ...


mercredi 16 avril 2008 à 22:12:23 | Re : Comment suspendre un processus sous Windows en passant par ses threads ?

ijneb11

Merci pour l'info, ça peut m'être bien utile car je ne m'était pas beaucoup penché sur WMI pour mon problème.
Cet exemple ne montre pas comment accéder aux threads à priori mais peut-être qu'en fouillant à partir de ça je trouverai quelque chose.



Cette discussion est classée dans : windows, processus, threads, passant, suspendre


Répondre à ce message

Sujets en rapport avec ce message

utilisation de librairie binaire(dll sous windows et sous linux) [ par kollibar ] comment je peut faire pour créer une dll (en C ou C++ ) et utiliser ses fonctions  en python. je sais qu'il y a des contraintes sur l'écriture de la d interpreteur sous windows [ par arnohoho ] hello tous le monde voila je cherche un bon interpreteur python pour windowscomme certain ici programme deja depuis un certain temps il pourront certe Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati creer un executable python à faire fonctionner sous windows [ par marcus034 ] Bonjour, Nouvel utilisateur de python, je n'arrive pas à exécuter un script python  (créé sous idle de mandrake) sous windows. Comment concretement cr Python er Threads [ par dirthangel ] Salut a tous je suis programmeur perl, j'aimerais savoir si les threads en python sont stable ? car c'est un vraie problème en Perl merci !!! Liste des applications Windows [ par aera group ] Bonjour,Je cherche à savoir s'il excise un sous programme de Windows qui renvoi la liste des applications ouvertes actuellement. Par exemple, si j'ai Aide : obtenir des information de Windows [ par aera group ] Bonjour,je viens de tomber sur un site très interressant sur Python et Windows. Dans ce site, on a tous les codes utiles pour obtenir des information logiciel pour python [ par Thomeux ] Bonjour,jusqu'ici je programmais en vb et vb.net, mais comme j'utilise windows et linux, je voudrais que mes programmes soient compatible pour les deu connexion client/serveur sous linux [ par tsic ] Bonjour,SVP aidez moi à trouver le code du serveur de connexion.j'ai déjà testé celui de windows et ça a marché. Mais mon encadreur demande un serveur Python et Windows Mobile 6 [ par jiyuu ] Bonsoir à tous,Je me permets de poster ce message pour poser deux questions: *Quelqu'un sait-il comment charger wxPyCE (wxPython pour windows mobile)


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales