begin process at 2008 08 29 04:08:13
1 233 495 membres
36 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Comment suspendre un processus sous Windows en passant par ses threads ? [ Divers / Aide et documentation ] (ijneb11)

Comment suspendre un processus sous Windows en passant par ses threads ? le 03/04/2008 17:34:21

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

Re : Comment suspendre un processus sous Windows en passant par ses threads ? le 16/04/2008 21:14:51

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



Re : Comment suspendre un processus sous Windows en passant par ses threads ? le 16/04/2008 22:12:23

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.



Classé sous : windows, processus, threads, passant, suspendre

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS