Програмна реалізація менеджера процесів як компоненти системи графічного адміністрування Ajenti

Структура та побудова модулів для системи віддаленого адміністрування серверів Ajenti. Огляд веб-орієнтованих систем віддаленого адміністрування для linux. Процес розробки та реалізації програмного модуля "Менеджер процесів", системні вимоги до нього.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 09.06.2012
Размер файла 3,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Стани процесу, перераховані вище, дають статичну уявлення про процес, однак процеси безперервно переходять із стану в стан відповідно до певних правил. Діаграма переходів є орієнтований граф, вершини якого є стани, в які може перейти процес, а дуги - події, що є причинами переходу процесу з одного стану в інший. Перехід між двома станами дозволений, якщо існує дуга з першого стану в друге. Кілька дуг може виходити з одного стану, однак процес переходить тільки по одній з них залежно від того, яка подія сталася в системі. На рисунку 2.1 представлена ??діаграма переходів для станів, перерахованих вище.

Рисунок 2.1 - Стани процесу та переходи між ними

Щоб підвести риску, ще раз скажемо, що ядро захищає свою цілісність, дозволяючи перемикання контексту тільки тоді, коли процес переходить у стан «сну», а також перешкоджаючи впливу одного процесу на інший з метою зміни стану останнього. Воно також підвищує пріоритет переривання процесора на час виконання критичних секцій програм, забороняючи таким чином переривання, які в іншому випадку можуть викликати порушення цілісності. Планувальник процесів періодично вивантажує процеси, що виконуються в режимі завдання, для того, щоб процеси не могли монопольно використовувати центральний процесор.

2.3 Моделювання додатку

Універсальна мова моделювання UML дозволяє накреслити не тільки абстрактну концептуальну модель системі яка розроблюється але й логічну а також фізичну моделі програмної системи. За допомогою UML була побудована так звана діаграма варіантів використання (use case diagram) (див. рис 2.2), вона описує функціональне призначення системи, також можна сказати що вона описує що буде робити система в процесі функціонування. Діаграма варіантів використання є вихідним концептуальним поданням чи концептуальною моделлю системи в процесі її розробки і впровадження.

Рисунок 2.2 - Діаграма варіантів використання

Даної діаграма по суті полягає в наступному: проектована система надається у вигляді безлічі сутностей або акторів, які взаємодіють з системою за допомогою так званих варіантів використання. При цьому актором (actor) або дійовою особою називається будь-яка сутність, що взаємодіє з системою ззовні. Це може бути людина, технічний пристрій, програма або будь-яка інша система, яка може служити джерелом впливу на модельовану систему так, як визначить сам розробник. У свою чергу, варіант використання (use case) служить для опису сервісів, які система надає акторові. Іншими словами, кожен варіант використання визначає певний набір дій, який чинять системою при діалозі з актором. При цьому нічого не говориться про те, яким чином буде реалізовано взаємодія акторів із системою.

Тепер ми маємо змогу розробити так звану Діаграму діяльності (activity diagram) див. рис. 2.3. Вона допоможе зрозуміти структуру та принцип роботи програмного модулю.

Рисунок 2.3 - Діаграма діяльності

З даної діаграми ясно видно, що за функціональністю програма має потенціал для розвитку бо такі можливості як зупинення процесу, змінення групи процесу, змінення пріоритету процесу, та ін..

3 ОПИС ПРОГРАМНОЇ РЕАЛІЗАЦІЇ

Написаний додаток не потребує багатосторінкового інтерфейсу тому був розроблений єдиний інтерфейс який містить у собі всі необхідні функції (див. рис. 3.1).

Рисунок 3.1 - Головний екран модуля «Менеджер процесів»

Серед усього іншого у користувача є можливість сортувати список процесів по будь якому стовпцю та видаляти процеси. Оскільки видалення процесу є небезпечною дією то користувачеві не рекомендовано це робити не маючи необхідних знань про те на що буде впливати результат цієї дії. Так наприклад якщо користувач видалить процес ``/sbin/init``, від якого запускаються усі інші процеси то будуть знищені заразом і всі його нащадки (тобто всі процеси крім тих які породив ``[kthreadd]``- процес який керує стартом керуючих процесів ядра системи).

Чи не найважливішою рисою даного плагіну є можливість виводу процесів у вигляді дерева (див. рис. 3.2).

Рисунок 3.2 - Додатковий екран модулю «Менеджер процесів», сортування деревом

Рисунок 3.3 - Запит про точність намірів відносно видалення процесу

4 АНАЛІЗ ДОСЛІДНОЇ ЕКСПЛУАТАЦІЇ

Для коректної роботи необхідно мати сервер, під управлінням операційних систем Linux (дистрибутиви Ubuntu, Debian, Fedora) або FreeBSD з встановленими пакетами для робот из Python. Клієнтом може виступати сам сервер або будь-який інший комп'ютер на якому встановлений браузер і є доступ до сервера по локальній мережі або ж через інтернет.

Системні вимоги сервера мінімальні, можливий варіант запуску сервера для адміністрування WiFi роутера з вільною прошивкою DD-WRT .

Системні вимоги клієнта:

- Операційна система Windows, Linux, MacOS, Google Os;

- Браузер з підтримкою JavaScript.

Браузери з підтримкою JavaScript:

- Firefox Version 2.0 або новіше;

- Internet Explorer Version 6.0 або новіше;

- Safari 5.0 або новіше;

- Opera 9.0 або новіше.

Оскільки мій додаток використовує низько рівневі функції операційної системи та командної строки переносимість між Unix-подібними системами буде залишатися на високому рівні.

ВИСНОВКИ

У процесі виконання дипломної роботи мною були розглянуті питання структури та побудови модулів для системи віддаленого адміністрування серверів Ajenti. Ajenti є достатньо інноваційним продуктом, що полегшує завдання адміністрування та спостереження за сервером. Ця система призначена для роботи на сімействі операційних систем UNIX, тому працюючи над виконанням завдання я розширив свої знання та навички в роботі з низькорівневими функціями роботи з системою процесів.

В ході виконання дипломної роботи мною було реалізовано програмний модуль «Менеджер процесів», що дозволяє:

- перегляд списку процесів;

- сортування процесів по їх характеристикам;

- виведення процесів у вигляді дерева;

- видалення процесу або під-дерева процесів.

Була проведена робота по визначенню основних переваг та недоліків щодо мови програмування яка була використана (Python) та систем які вже досить давно працюють в тій же сфері адміністрування що й Ajenti, а саме Zental та Webmin. Оскільки Порівнювані системи адміністрування були розроблені досить давно то технології що в них застосовувалися почали втрачати свою актуальність з чого було зроблено вивід що Ajenti є найбільш актуальною системою на сьогодні, і хоча в ній не так багато можливостей вона швидко розвивається.

Написання додатку відбувалося за допомогою модульної середи розробки IDE Eclipse та її додаткових розширень дозволяючи писати на мові Python PyDev. Також використовувалась віртуальна машина з операційною системою Ubuntu 11.04 на базі Oracle VirtualBox 4.04.

В даний час розроблений додаток відісланий на перевірку валідності автору системи, після чого він буде доданий до офіційного репозиторію.

Під час виконаня роботи я зрозумів що даних функцій які я вже реалізував у додатку недостатньо для комфортної роботи адміністратора тому планується подальший розвиток плагіну.

ПЕРЕЛІК ПОСИЛАНЬ

1. International Organisation of Standartisation ISO/IEC 9594-10:2008 Information technology -- Open Systems Interconnection -- The Directory: Use of systems management for administration of the Directory [Електронний ресурс] / Prof. Dae Young Kim - Режим доступу: www/ URL: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=53374 - 20.05.2011 р. - Загл. з екрану.

2. Ajenti [Електронний ресурс] / Е. Панков - Режим доступу: www/ URL: htttp://Ajenti.org - 20.05.2011 р. - Загл. з екрану.

3. OpenSource проект ищет разработчиков [Електронний ресурс] / Е. Панков - Режим доступу: www/ URL: http://habrahabr.ru/blogs/i_am_advertising/104911/ htm - 20.05.2011 р. - Загл. з екрану.

4. Курячий, Г.В. Операционная система Linux [Електронний ресурс] / Г.В. Курячий, К.А. Маслинский. - Режим доступу: www/ URL: http://www.intuit.ru/department/os/linux/3/2.htm - 20.05.2011 р. - Загл. з екрану.

5. Офіційний сайт проекту DD-WRT [Електронний ресурс] - Режим доступу: www/ URL: www.dd-wrt.com - 20.05.2011 р. - Загл. з екрану.

6. Кофлер, М. Linux. Полное руководство [Текст] / Михаэль Кофлер. - Изд-во: Питер, 2011. - 800 с. - ISBN 978-5-459-00508-0

7. Операционная система FreeBSD [Електронний ресурс] - Режим доступу: www/ URL: http://www.freebsd.org - 22.05.2011 р. - Загл. з екрану

8. Немет, Э. Руководство администратора Linux [Текст] / Э.Немет, Г. Снайдер, Т. Хейн. - Изд-во: Вильямс, 2007. - 1072 с. - ISBN 978-5-8459-1093-6

9. Вахалия, Ю. UNIX изнутри 2001 [Текст] / Ю. Вахалия. - СПб.: Питер 2003. - 844 с.

10. Гнатуш, А. Реинжиниринг: многое в малом [Текст] / Александ Гнатуш // "IT Manager". - 2004. - №4(16).

11. Эбен, М. Администрирование: искусство достижения равновесия [Текст] / Майкл Эбен, Брайан Таймэн: пер. с англ. - М: изд-во «ДайСофт», 2005 - 864 с.

12. Болл, Б. Red Hat Linux 8/9. Настольная книга пользователя. Platinum Edition [Текст] / Билл Болл, Хойт Даф : пер. с англ. - М.: изд-во «ДайСофт», 2005. - 928 с.

13. UNIX подобные ОС [Електронний ресурс] - Режим доступу: www/ URL: http://www.opennet.ru - 21.05.2011 р. - Загл. з екрану

14. Описание настройки ядра ОС [Електронний ресурс] - Режим доступу: www/ URL: http://91.192.71.196/BSDCert/BSDA-course/ch07s07.html - 24.05.2011 р. - Загл. з екрану

15. Луни, К. Настольная книга администратора [Текст] / Кевин Луни, Марлен Терью: Перевод с англ. - М.: изд-во «ЛОРИ», 2004ю - 748 с.

16. Глушаков, С.В. Администрирование [Текст] / С.В. Глушаков, Ю.В. Третьяков, О.А. Головаш. - Харьков: «Фолио», 2003. - 695 с.

17. Стивенс, У. NIX: взаимодействие процессов [Текст] / У. Стивенс. - СПб.: Питер, 2003. - 575с.

18. Офіційний сайт проекту Webmin [Електронний ресурс] - Режим доступу: www/ URL: http://www.webmin.com/ - 20.05.2011 р. - Загл. з екрану.

19. Офіційний сайт проекту Zentyal [Електронний ресурс] - Режим доступу: www/ URL: http://www.zentyal.com/ - 20.05.2011 р. - Загл. з екрану.

20. Стивенс У. UNIX: разработка сетевых приложений [Текст] / У. Стивенс. - СПб.: Питер, 2003. - 1088 с.

21. Ксензов, М.В. Рефакторинг архитектуры программного обеспечения [Текст] / М.В. Ксензов // Труды Института Системного Программирования РАН, Препринт 4. - М., 2004.

22. Автоматизированное создание документов серии ГОСТ 34 и 19 с помощью инструментальных средств фирмы IBM Rational [Електронний ресурс] / И.В. Галахов, Д.В. Лапыгин, А.Н. Новичков, О.Р. Подоляк, Б.А. Позин // Доклад и статья опубликованы в рамках III-ей Всероссийской практической конференции: "Стандарты в проектах современных информационных систем". - Режим доступу: www/ URL: www.osp.ru, www.fostas.ru - 22.05.2011 р. - Загл. з екрану

23. Дайсон, П. «Операционная система UNIX»: настольный справочник [Текст] / П. Дайсон. - М.: «Лори», 1997.

24. Рейчард, К. UNIX: Справочник. [Текст] / К. Рейчард, Э. Фостер-Джонсон. - СПб.: Питер Ком., 1999.

25. Уинзор, Дж. SOLARIS Руководство системного администратора [Текст] / Дж.Уинзор: 3-е изд.: пер. с англ. - СПб.: Питер, 2003.- 448 с.

26. Лепаж, Ив. UNIX. Библия пользователя [Текст] / Ив Лепаж, Пол Яррера: 2-е изд.: Пер. с англ. - М.: Издательский дом «Вильямс», 2001. - 640 с.

27. Топхем, Д. Юникс и Ксеникс [Текст] / Д. Топхем, Хай Ван Чыонг. - М.: «Мир», 1988.

28. Готье, Р. Руководство по операционной системе UNIX [Текст] / Р. Готье. - М.: «Финансы и статистика», 1985.

29. Операционные системы [Електронний ресурс] - Режим доступу: www/ URL: http://www.citforum.ru.

менеджера процес графічне адміністрування ajenti

Додаток А

програмна реалізація модуля Ajenti «менеджер ПРОЦЕСІВ»

from ajenti.api import *

from ajenti.ui import *

import subprocess

from UserList import *

class ProcessManagerPlugin(CategoryPlugin):

text = 'Process Manager'

icon = '/dl/process_manager/icon.png'

folder = 'system'

def on_session_start(self):

self._tab = 1

self._process = Process()

self._tree = TreeManager()

self._labelText = 'Something here'

def get_ui(self):

panel = UI.PluginPanel(UI.Label(text=self._process), title='Process Manager', icon='/dl/process_manager/icon.png')

panel.append(self.get_default_ui())

return panel

def get_default_ui(self):

tc = UI.TabControl(active=self._tab)

tc.add('Processes', self.get_ui_processes())

tc.add('Processes tree', self.get_ui_processes_tree())

return tc

def get_ui_processes_tree(self):

lt = UI.LayoutTable(

UI.LayoutTableRow(

UI.ScrollContainer(self.get_ui_process_tree(), height=500),

UI.DataTable(

UI.DataTableRow(UI.DataTableCell(UI.Label(text='UID')),

UI.DataTableCell(UI.Label(text= str(self._process.uid)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='PID')),

UI.DataTableCell(UI.Label(text= str(self._process.pid)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='PPID')),

UI.DataTableCell(UI.Label(text= str(self._process.ppid)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='LWP')),

UI.DataTableCell(UI.Label(text= str(self._process.lwp)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='C')),

UI.DataTableCell(UI.Label(text= str(self._process.c)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='NLWP')),

UI.DataTableCell(UI.Label(text= str(self._process.nlwp)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='SZ')),

UI.DataTableCell(UI.Label(text= str(self._process.sz)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='RSS')),

UI.DataTableCell(UI.Label(text= str(self._process.rss)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='PSR')),

UI.DataTableCell(UI.Label(text= str(self._process.psr)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='STIME')),

UI.DataTableCell(UI.Label(text= str(self._process.stime)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='TTY')),

UI.DataTableCell(UI.Label(text= str(self._process.tty)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='TIME')),

UI.DataTableCell(UI.Label(text= str(self._process.time)))),

UI.DataTableRow(UI.DataTableCell(UI.Label(text='CMD')),

UI.DataTableCell(UI.Label(text= str(self._process.cmd)))),

UI.DataTableRow(UI.DataTableCell(

UI.WarningButton(text='Kill process ', id='killProcess', msg='KillProcess ' + self._process.cmd ))),

#UI.DataTableRow(UI.DataTableCell(UI.Label(text=self._labelText)))

)

)

)

return lt

def get_ui_processes(self):

processes = Process().get_all_processes()

t = UI.DataTable(UI.DataTableRow(

UI.Label(text='UID', id = 'column/uid'),

UI.Label(text='PID', id = 'column/pid'),

UI.Label(text='PPID', id = 'column/ppid'),

UI.Label(text='LWP', id = 'column/lwp'),

UI.Label(text='C', id = 'column/c'),

UI.Label(text='NLWP', id = 'column/nlwp'),

UI.Label(text='SZ', id = 'column/sz'),

UI.Label(text='RSS', id = 'column/rss'),

UI.Label(text='PSR', id = 'column/psr'),

UI.Label(text='STIME', id = 'column/stime'),

UI.Label(text='TTY', id = 'column/tty'),

UI.Label(text='TIME', id = 'column/time'),

UI.Label(text='CMD', id = 'column/cmd'),

UI.Label(), header=True))

for p in processes:

t.append(UI.DataTableRow(

UI.DataTableCell(UI.Label(text=p.uid, bold=True)),

UI.DataTableCell(UI.Label(text=str(p.pid), bold=True)),

UI.DataTableCell(UI.Label(text=str(p.ppid))),

UI.DataTableCell(UI.Label(text=str(p.lwp))),

UI.DataTableCell(UI.Label(text=str(p.c))),

UI.DataTableCell(UI.Label(text=str(p.nlwp))),

UI.DataTableCell(UI.Label(text=str(p.sz))),

UI.DataTableCell(UI.Label(text=str(p.rss))),

UI.DataTableCell(UI.Label(text=str(p.psr))),

UI.DataTableCell(UI.Label(text=p.stime)),

UI.DataTableCell(UI.Label(text=p.tty)),

UI.DataTableCell(UI.Label(text=p.time)),

UI.DataTableCell(UI.Label(text=p.cmd, bold=True)),

UI.DataTableCell(

UI.WarningButton(text='Kill process ', id=str(p.pid), msg='KillProcess ' + p.cmd ))

)

)

return UI.ScrollContainer(t, height=650, width=790)

def get_ui_process_tree(self):

root = UI.TreeContainer(text='Processes', id='/')

processes = Process().get_all_processes()

self._labelText = 'vsego processov ' + str(len(processes)) + '\n'

self.scan_processes(root, processes, '/')

self._tree.apply(root)

root['expanded'] = True

return root

def scan_processes_2(self, node, processes, nodepath):

processes.sort(key=lambda x: x.pid, reverse=False)

self._labelText = 'vsego processov ' + str(len(processes)) + '\n'

for proc in processes:

self._labelText += str(len(proc.childs)) + '\n'

if proc.isAllreadyUsed != 0:

continue

try:

if len(proc.childs) > 0:

tn = UI.TreeContainer(text=proc.cmd, id=nodepath + str(proc.pid) + '/')

self.scan_processes(tn, proc.childs, nodepath + str(proc.pid) + '/')

node.append(tn)

else:

tn = UI.LinkLabel(text=proc.cmd, id=nodepath + str(proc.pid) + '/')

tn = UI.TreeContainerNode(tn)

node.append(tn)

proc.isAllreadyUsed = 1

except:

pass

def scan_processes_1(self, node, processes, nodepath):

processes.sort(key=lambda x: x.pid, reverse=False)

self._labelText = 'vsego processov ' + str(len(processes)) + '\n'

for proc in processes:

self._labelText += str(len(proc.childs)) + '\n'

if proc.isAllreadyUsed != 0:

continue

try:

if len(proc.childs) > 0:

tn = UI.TreeContainer(text=proc.cmd, id=nodepath + '/' + str(proc.pid))

node.append(tn)

self.scan_processes(proc.childs, tn, nodepath + '/' + str(proc.pid))

else:

tn = UI.LinkLabel(text=proc.cmd, id='view/' + nodepath + '/' + str(proc.pid))

tn = UI.TreeContainerNode(tn)

node.append(tn)

proc.isAllreadyUsed = 1

except:

pass

def scan_processes(self, node, processes, nodepath):

processes.sort(key=lambda x: x.pid, reverse=True)

for proc in processes:

if proc.isAllreadyUsed != 0:

continue

proc.childs=proc.get_childs(processes)

self._labelText += str(len(proc.childs))

try:

if len(proc.childs) < 1:

self._labelText += '<1 '

tn = UI.LinkLabel(text=proc.cmd.replace('/', '|'), id=nodepath + str(proc.pid)+ '/')

tn = UI.TreeContainerNode(tn)

node.append(tn)

else:

self._labelText += '>=1 '

tc = UI.TreeContainer(text=proc.cmd.replace('/', '|'), id=nodepath + str(proc.pid) + '/')

self.scan_processes(tc, proc.childs, id=nodepath + str(proc.pid)+'/')

node.append(tc)

proc.isAllreadyUsed = 1

except:

pass

def scan_processes_3(self, node, processes, nodepath):

processes.sort(key=lambda x: x.pid, reverse=False)

for proc in processes:

childs = proc.get_childs(processes)

try:

if len(childs) < 1:

ll = UI.LinkLabel(text=proc.cmd.replace('/', '|'), id=nodepath + '/' + str(proc.pid))

ll = UI.TreeContainerNode(ll)

node.append(ll)

else:

self._labelText = 'vsego processov ' + str(len(childs)) + '\n'

tc = UI.TreeContainer(text=proc.cmd.replace('/', '|'), id=nodepath + '/' + str(proc.pid))

self.scan_processes(tc, childs, id=nodepath + str(proc.pid))

node.append(tc)

proc.isAllreadyUsed = 1

except:

pass

@event('linklabel/click')

def on_click(self, event, params, vars=None):

self._process = Process().get_process_by_id(params[0])

@event('treecontainer/click')

def on_tclick(self, event, params, vars=None):

self._tree.node_click('/'.join(params))

return ''

@event( 'button/click')

def on_click(self,event, params, vars=None):

if params[0] == 'killProcess':

self._tab = 1

self._process = Process().get_process_by_id(params[0])

self._process.kill_process_for_id(self._process.pid)

class Process:

isAllreadyUsed = 0

uid = ''

pid = 0

ppid = 0

lwp = 1

c = 0

nlwp = 1

sz = 0

rss = 0

psr = 0

stime = ''

tty = ''

time = ''

cmd = ''

childs = []

def kill_process_for_id(self, pid):

subprocess.check_output(["kill", str(pid)])

def get_all_processes_list(self):

result = []

isFirst = 1

for string in subprocess.check_output(["ps", "-eLF"]).split('\n'):

if isFirst == 1:

isFirst = 0

continue

else:

result.append(string)

return result

def get_all_processes_in_string(self):

result = ''

processes = self.get_all_processes_list()

for string in processes:

result += self.parse_process_string(string)

return result

def get_childs(self, processes):

result = []

for proc in processes:

if self.pid == proc.ppid:

result.append(proc)

return result

def get_parent(self, processes):

if self.ppid == 0:

return self

for proc in processes:

if self.ppid == proc.pid:

return proc

return self

def get_process_by_id(self,id):

for proc in self.get_all_processes():

if proc.id==id:

return proc

return Process()

def parse_process_string(self, string):

ss = ''

for s in string.split(' '):

if s == '':

continue

else:

ss = ss + s + '$'

return ss

def parse_process_string_to_list(self, string):

lst = []

for s in string.split(' '):

if s == '':

continue

else:

lst.append(s)

return lst

def get_process_from_strings(self, strings):

p = Process()

try:

p.uid = strings[0]

p.pid = int(strings[1])

p.ppid = int(strings[2])

p.lwp = int(strings[3])

p.c = strings[4]

p.nlwp = strings[5]

p.sz = int(strings[6])

p.rss = int(strings[7])

p.psr = int(strings[8])

p.stime = strings[9]

p.tty = strings[10]

p.time = strings[11]

p.cmd = strings[12]

except:

pass

return p

def get_all_processes(self):

result = []

processes = self.get_all_processes_list()

for string in processes:

strings = self.parse_process_string_to_list(string)

p = self.get_process_from_strings(strings)

result.append(p)

self.generate_tree(result)

return result

def generate_tree(self, processes):

processes.sort(key=lambda x: x.pid, reverse=False)

for parent in processes:

parent.childs.append(parent.get_childs(processes))

def to_string(self):

string = ''

string += self.uid + '\t'

string += str(self.pid) + '\t'

string += str(self.ppid) + '\t'

string += str(self.lwp) + '\t'

string += str(self.c) + '\t'

string += str(self.nlwp) + '\t'

string += str(self.sz) + '\t'

string += str(self.rss) + '\t'

string += str(self.psr) + '\t'

string += str(self.stime) + '\t'

string += str(self.tty) + '\t'

string += str(self.time) + '\t'

string += str(self.cmd)

return string

Размещено на Allbest.ru


Подобные документы

  • Мережне адміністрування. Програми для віддаленого адміністрування. Віддалене управління засобами Telnet. Можливості програми Remote Administrator 2.2. Безпека Radmin. Режим обміну файлами. Запит логіна і пароля перед початком роботи з File Manager.

    курсовая работа [1,5 M], добавлен 24.03.2009

  • Основи адміністрування. Стадії завантаження та керування режимами роботи Linux. Особливості завантаження системи X Window. Конфігураційний файл XF86Config. Монтування файлових систем та додання нових користувачів і груп. Ущільнення і архівування файлів.

    реферат [21,3 K], добавлен 15.03.2009

  • Вибір архітектури та інструментальних засобів розробки. Розробка модуля для перегляду сторінок сайту, доступного, зручного інтерфейсу системи адміністрування. Створення бази даних. Опис механізмів передачі даних між сторінками. Реалізація форуму на сайті.

    дипломная работа [7,1 M], добавлен 24.09.2012

  • Проект і реалізація структури модулів портальної системи і бази даних: стрічка новин, електронні голосування, користувачі порталу, сторінки сайту; методи та формати зберігання даних. Система адміністрування веб-порталу, управління обліковими записами.

    дипломная работа [3,6 M], добавлен 24.09.2012

  • Локальна система віддаленого обслуговування. Історія розвитку. Змішані системи. Системи Банк-Клієнт. Огляд системи "Клієнт-банк" ПриватБанку. Огляд світової та національної законодавчих баз, що регламентують електронний документообіг. Стан в Україні.

    дипломная работа [1,2 M], добавлен 13.09.2008

  • Структура типових функціональних підсистем інформаційних систем Державної судової адміністрації та Верховної ради України. Призначення систем керування електронними документами. Підходи до управління та адміністрування, які прийняті в мережі Інтернет.

    контрольная работа [82,6 K], добавлен 20.07.2011

  • Характеристика, етапи розвитку підприємства "Краснодонський міжшкільний навчально-виробничий комбінат", особливості виробничої діяльності, електронне обладнання. Програмні засоби, що використовуються для стискання інформації. Адміністрування користувачів.

    отчет по практике [1,0 M], добавлен 19.05.2010

  • Види віртуальних тестових машин, їх ключові можливості, сумісність c операційними системами. Процес установки гостьових ОС BackTrack і FreeBSD. Встановлення серверного програмного забезпечення. Тестування веб-сервера і засобів віддаленого управління.

    дипломная работа [3,5 M], добавлен 22.07.2015

  • Методика створення веб-додатку для визначення рівня інтелекту людини з використанням мови програмування PHP. Загальна характеристика та принципи роботи з засобами адміністрування, за допомогою яких авторизований адміністратор може керувати веб-додатком.

    дипломная работа [1,9 M], добавлен 13.10.2010

  • Розробка сайту "Система активної реклами" для розкрутки сайту в мережі Інтернет, заробітку грошей. Аналіз подібних систем. Інструментальні засоби розробки. Доступ до системи адміністрування. Керівництво програмісту: структура бази даних, основні класи.

    дипломная работа [2,6 M], добавлен 24.09.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.