Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2011 10:20:29

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

Всем привет! Прошу не пинать, а помочь, в pythone новичок
Пишу скрип который отслеживает работу нужных мне процессов, так вот столкнулся с такой проблемой, а как реализовать с несколькими процессами. С одним делаю так:

#!/usr/bin/env python
import string
import commands, os, string
try:
#
httpd = commands.getoutput("ps ax|grep " + "httpd")
proginfo = string.split(httpd)
httpd = 'httpd'
for i in proginfo:
if httpd in i:
print "Process httpd", i
except:
print "There was a problem with the program."



Офлайн

#2 Апрель 5, 2011 11:14:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

отслеживание процессов unix

вот один из извращенных методов, возвращает ид процессов

>>> p = ['python','bluetooth']
>>> d = commands.getoutput('ps x').splitlines()
>>> [filter(lambda x:i in x,d)[0].split()[0] for i in p]
['2291', '2004']

Офлайн

#3 Апрель 5, 2011 11:28:10

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

))), а если не извращенный? то как. В курсе что есть psutil, пока опыта маловато поэтому не получается



Офлайн

#4 Апрель 5, 2011 12:37:47

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

отслеживание процессов unix

>>> import psutil
>>> print psutil.get_pid_list()
[0, 4, 932, 1044, 1072, 1116, 1128, 1280, 1300, 1392, 1492, 1640, 1748, 1844, 19
16, 2004, 508, 704, 736, 740, 776, 872, 1036, 1620, 1656, 1664, 1756, 1852, 2144
, 2160, 2208, 2248, 2276, 2320, 2360, 2388, 2444, 2496, 3844, 2996, 2492, 3196,
328, 1780, 804, 2344, 3404, 2460, 3520, 2348, 3500, 3280, 1536]
>>> for p in psutil.process_iter():
... if p.name == 'httpd.exe':
... print p.get_connections()
...
[connection(fd=-1, family=2, type=1, local_address=('0.0.0.0', 80), remote_addre
ss=(), status='LISTEN')]
[]



Офлайн

#5 Апрель 5, 2011 12:44:39

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

сп-бо! буду разбираться



Офлайн

#6 Апрель 5, 2011 13:29:13

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

Повторяю код zheromo после этого print p.get_connections() тишина OS Freebsd6.2 в tope

47675 www 1 4 0 21488K 13196K accept 0:00 0.00% httpd
40973 www 1 4 0 21484K 13068K accept 0:00 0.00% httpd
41408 www 1 4 0 21484K 13068K accept 0:00 0.00% httpd
41405 www 1 4 0 21484K 13068K accept 0:00 0.00% httpd

здесь if p.name == ‘httpd.exe’: меняю на if p.name == ‘httpd’:



Отредактировано (Апрель 5, 2011 13:30:16)

Офлайн

#7 Апрель 5, 2011 14:08:02

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

отслеживание процессов unix

Все имена процессов вывести - и посмотреть - у меня (под ubuntu) apache2 он называется



Офлайн

#8 Апрель 5, 2011 14:13:39

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

у меня
Server version: Apache/2.2.17 (FreeBSD)
Server built: Mar 30 2011 13:46:24
ps ax | grep httpd
40972 ?? Ss 0:03.11 /usr/local/sbin/httpd -k start
40973 ?? I 0:00.11 /usr/local/sbin/httpd -k start
40975 ?? I 0:00.08 /usr/local/sbin/httpd -k start
40976 ?? I 0:00.02 /usr/local/sbin/httpd -k start
40977 ?? I 0:00.08 /usr/local/sbin/httpd -k start
41405 ?? I 0:00.10 /usr/local/sbin/httpd -k start
41407 ?? I 0:00.08 /usr/local/sbin/httpd -k start
41408 ?? I 0:00.11 /usr/local/sbin/httpd -k start
47673 ?? I 0:00.08 /usr/local/sbin/httpd -k start
47674 ?? I 0:00.05 /usr/local/sbin/httpd -k start
47675 ?? I 0:00.11 /usr/local/sbin/httpd -k start



Офлайн

#9 Апрель 5, 2011 14:39:15

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

отслеживание процессов unix

Что выдает?

>>> import psutil
>>> print set([ p.name for p in psutil.process_iter() ])



Офлайн

#10 Апрель 5, 2011 14:41:37

larinva
От:
Зарегистрирован: 2011-04-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

отслеживание процессов unix

>>> print set([ p.name for p in psutil.process_iter() ])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/site-packages/psutil/__init__.py", line 162, in name
name = self._platform_impl.get_process_name()
File "/usr/local/lib/python2.5/site-packages/psutil/_psbsd.py", line 72, in wrapper
raise NoSuchProcess(self.pid, self._process_name)
psutil.error.NoSuchProcess: process no longer exists (pid=90332)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version