OVH Cloud OVH Cloud

Win32: Voir et tuer process

18 réponses
Avatar
Python-Fr
Bonjour,
j'aimerais savoir s'il existe des moyens simples pour obtenir la liste
de tous les process. en cours et de tuer certains de ceux-ci sous
WindowsXP.

L'objectif serait d'utiliser un petit script ne retenant que les
process essentiels afin de lib=E9rer les ressources du pc avant de
lancer, par exemple, un jeu.

D'avance merci.

10 réponses

1 2
Avatar
Do Re Mi chel La Si Do
Bonsoir !

Sous windows XP, je connais trois solutions (il doit y en avoir d'autres) :
- avec PyWin32 (win32all), il y a, nativement, les méthodes/fonctions
nécessaires.
- avec PyWin32 (win32all), on peut piloter WMI, pour obtenir la liste
des processus (avec pas mal de détails), et en tuer certains.
- avec Popen, il est possible d'encapsuler les commandes windows
TASKLIST et TASKKILL (astuce : os.getpid() donne le PID du script
courant).

@-salutations

Michel Claveau
Avatar
Do Re Mi chel La Si Do
Re !

Voici, ci-dessous, un exemple simple.
Pour rester au plus simple, le script pilote (avec popen4) les commandes
TASKLIST et TASKKILL.

Si besoin, j'ai un exemple similaire, avec WMI. WMI donne plus de
renseignements, mais c'est nettement plus compliqué.

@-salutations
--
Michel Claveau



import os

def lcmd(lst=None):
"""lancement d'une liste de commandes
DOS, avec récupération de l'affichage
"""
a = os.popen4(lst[0])
for i in lst[1:]:
if i!='':
a[0].write(i+'rn')
a[0].flush()
return a[1].readlines()


# on va récupérer la liste des processus, avec leurs PID
lret = lcmd(['TASKLIST /NH'])
tasknom={}
taskpid={}
for n in lret:
l=n.split()
if l:
tasknom[l[0]]=l[1] # classement par noms
taskpid[l[1]]=l[0] # classement par PID


# pour lister ce que l'on a trouvé
#for i,j in enumerate(taskpid): print i,'t',j,'t',taskpid[j]


# Destruction de 'notepad'
if tasknom.has_key('notepad.exe'):
pid=tasknom['notepad.exe']
lcmd(['TASKKILL /PID '+str(pid)+' /F'])
Avatar
Python-Fr
Merci Do Re Mi chel La Si Do.

Malheureusement, les commandes TASKLIST et TASKKILL ne semblent pas
exister sur mon pc. Ces outils ne sont peut-être dispo. que sous XP
Pro.

Je vais regarder ce que je trouve du côté de l'API win32 ;-)
Avatar
Do Re Mi chel La Si Do
Salut !

Effectivement, les commandes citées sont fournies avec XP-Pro.
Cependant, il suffit de copier les fichiers (.EXE) sur un XP-familial, et ça
fonctionne.

Éventuellement, je pourrais te les faire suivre. Si ça t'intéresse, fais-moi
savoir, dans ce newsgroup, que tu m'enverras un e-mail privé.
Faute de quoi, les filtres anti-spam "méchants" sucreront tout...

@-salutations

Michel Claveau
Avatar
romu
Salut !

Effectivement, les commandes citées sont fournies avec XP-Pro.
Cependant, il suffit de copier les fichiers (.EXE) sur un XP-familial, et ça
fonctionne.

Éventuellement, je pourrais te les faire suivre. Si ça t'intéresse, fais-moi
savoir, dans ce newsgroup, que tu m'enverras un e-mail privé.
Faute de quoi, les filtres anti-spam "méchants" sucreront tout...

@-salutations

Michel Claveau



taratata !


tout ce que je vais te dire, c'est sur fond humoristique , n'en prend
pas ombrage ,c'est suite à une news que j'ai lu sur ce forum où tu
parlais de logiciel libre et je te cite :


Bonsoir !


Linux est un bon O.S.
Windows est un bon O.S.


Si chacun trouvera dans son O.S. les fonctions qui lui >
conviennent, pourquoi vouloir le faire changer ? > Surtout s'il n'y

a pas l'équivalent de l'autre côté.
etc...


là, manifestement il doit en changer , s'il veut les 2 binaires.
en sus ,il aura tous les autres ! :-)

Pour moi, le libre est synonyme de liberté. J'apprécie > les
logiciels libres,dont Python, parce qu'ils pportent > un degré de

liberté supplémentaire aux utilisateurs.

oui python est libre, pas les binaires win32.

Et, tout utilisateur doit être libre d'utiliser les > logiciels
qu'il veut, qu'ils soient des logiciels libres > ou des logiciels non

libres.

donc effectivement s'il utilise XP Familial, il doit utiliser PyWin32
pour arriver à ses fins !
une autre solution serait de passer par le tiroir caisse :-)
- mise à jour ?
- achat XP Pro ?
en tout cas, pas ta méthode de pirate ! :-) :-) :-)

moi, pour que les exe passent, je les renomme en .jpg
y'a plus qu'à les renommer à l'arrivée.

Allez , bonnes fêtes de fin d'année .

Romuald

Avatar
Do Re Mi chel La Si Do
Bonsoir !


taratata !




Tutlututu !


En fait, dans tous les O.S., il existe des add-ons, ajouts, compléments (ou
d'autres noms).

Les logiciels que j'ai cités sont inclus dans les "kits de ressources
techniques", diffusés gratuitement par MS. Il faut néanmoins être passé par
les fourches caudines du "Genuine Windows", ce qui peut poser des problèmes
aux versions non-officielles.
Il n'est donc pas question de piratage, dans ce cas.

En fait, le problème est général : c'est celui des évolutions. Par exemple,
j'avais, l'année dernière (j'espère que ce message sera lu avant la fin
2005...), investi dans un linux (RedHat). Et bien, il a fallu que je rajoute
tout plein de choses.

Du coup, ce genre de truc empêche de comparer efficacement, différentes
solutions. Enfin, fô faire avec.


@-salutations

Michel Claveau



Avatar
Hexade
Cependant, il suffit de copier les fichiers (.EXE) sur un XP-familial, et ça
fonctionne.


J'ai justement un autre pc sous XP-Pro pas loin... je vais aller voir
ça ;-)
Ce n'est pas illégal, à ce que je sache.

Avatar
Laurent Pointal
Python-Fr wrote:

Bonjour,
j'aimerais savoir s'il existe des moyens simples pour obtenir la liste
de tous les process. en cours et de tuer certains de ceux-ci sous
WindowsXP.

L'objectif serait d'utiliser un petit script ne retenant que les
process essentiels afin de libérer les ressources du pc avant de
lancer, par exemple, un jeu.

D'avance merci.


Tu devrais pouvoir utiliser le WMI (Windows Management Interface je crois).
Zieute par ici...

http://tgolden.sc.sabren.com/python/wmi.html
http://tgolden.sc.sabren.com/python/wmi_cookbook.html


Et en version compliquée (ie sans le module de Tim Golden):
http://www.microsoft.com/technet/scriptcenter/scripts/python/misc/wmi/default.mspx

A+

Laurent Pointal

Avatar
Florent Manens
Le 27-12-2005, Do Re Mi chel La Si Do a écrit :
Sous windows XP, je connais trois solutions (il doit y en avoir d'autres) :
- avec PyWin32 (win32all), il y a, nativement, les méthodes/fonctions
nécessaires.


Je pense que je suis intéressé, si tu as des informations à ce sujet, je suis à
ton écoute !

- avec PyWin32 (win32all), on peut piloter WMI, pour obtenir la liste
des processus (avec pas mal de détails), et en tuer certains.



voici un exemple qui fonctionne pour moi avec WMI, sans utiliser le module wmi
(j'avais des problèmes avec py2exe).

Par contre, l'exemple n'est peut être pas optimal, je ne suis pas expert en API
win32.

# Pour l'utilisation de win32com dans un thread :
# http://mail.python.org/pipermail/python-win32/2004-August/002281.html

import win32api
import win32com
from win32com.client import GetObject
wmi = GetObject("winmgmts:")

name = "EXCEL.EXE"

for process in wmi.ExecQuery('select * from Win32_Process where Name="%s"' % name ):
# process est une structure contenant des informations sur le process en cours
currentname = process.Properties_("Name").Value
if currentname == name:
# je ne sais pas si il est possible d'avoir le handle directement
# donc je passe par le pid :/
pid = int(process.Properties_("Handle").Value)
PROCESS_TERMINATE = 1
handle = win32api.OpenProcess(PROCESS_TERMINATE, False, pid)
win32api.TerminateProcess(handle, -1)
win32api.CloseHandle(handle)


--
Florent Manens


Avatar
Méta-MCI
Bonsoir !


Pas mal du tout. Et, même, très bien.


Voici une autre version :


def wprocess(lstSuppr=[]):
import win32com,win32com.client
WMIService
=win32com.client.GetObject(r'winmgmts:{impersonationLevel=impersonate}!//.rootcimv2')
listProcess = WMIService.ExecQuery('Select * from Win32_Process')
for item in listProcess:
#print 'Nom_process :',item.Name
if item.name in lstSuppr:
try:
item.Terminate()
except:
pass

wprocess(['notepad.exe','WINWORD.EXE','pdxwin32.exe']) # en paramètre, la
liste des process à supprimer




En espérant que ça puisse aider.

Pour info, ce script est assez vieux. Entre temps, Microsoft a sorti de
nombreux scripts en Python, pour accéder à WMI.
Ces scripts sont téléchargeables là :
http://www.microsoft.com/technet/scriptcenter/scripts/python/default.mspx


En théorie, on pourrait remplacer le point (".") par le nom d'un ordinateur
quelconque d'un réseau. Cela veut dire que l'on peut obtenir la liste des
processus d'un autre poste, d'en détruire certains, etc. Un rêve pour
administrateur. Toutefois, la configuration des droits et permissions
nécessaires est assez difficile.




Sinon, WMI n'a pas grand chose à voir avec les API (de windows). En fait, il
s'agit de la version windows de WBEM, qui est un standard, pour les O.S.,
d'accès aux informations des machines, définit par le "Desktop Managment
Task Force" (DMTF) (voir http://www.dmtf.org/standards/wbem/)

Si WMI en est la version Windows, il devrait exister l'équivalent pour tous
les O.S. Malheureusement, il semblerait que plusieurs O.S. ne respectent
pas aussi bien les standards que Windows...


Toutefois, si WMI, est assez pratique, et permet d'obtenir des milliers
d'informations sur les ordinateurs, il n'est pas très rapide. Selon le
besoin, il peut être préférable de passer directement par les API. Mais,
c'est plus difficile.



@-salutations

Michel Claveau
1 2