Возможно вы искали: 'Cosmic Armageddon'

May 15 2025 23:46:49
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96161170
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18360
• Обзор The Walking ... 18804
• Обзор DMC: Devil M... 19880
• Обзор на игру Valk... 15878
• Обзор на игру Stars! 17765
• Обзор на Far Cry 3 17950
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17510
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16620
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14723
• Превью Firefall 13481
• Превью Dead Space 3 16335
• Превью о игре SimC... 14732
• Превью к игре Fuse 15443
• Превью Red Orche... 15542
• Превью Gothic 3 16347
• Превью Black & W... 17355
Главная » Статьи » Разное » Получить список процессов из C (proc vm)

Получить список процессов из C (proc vm)

Ключевые слова: proc, vm, (найти похожие документы)

- RU.UNIX.BSD (2:5077/15.22) ------------------------------------ RU.UNIX.BSD -
From : Vadim Kolontsov 2:5020/400 27 Apr 00 15:50:40
Subj : Получить список процессов из C
-------------------------------------------------------------------------------
From: nospam.vadim@tversu.ru (Vadim Kolontsov)
Reply-To: nospam.vadim@tversu.ru

In article <gq4ggso087d7le5s4l931o80ahtmjt4v8d@4ax.com>, Yury Lazarev wrote:

>Каким образом можно вытащить командную строку, с которой были запущены
>процессы в Unix (наподобие того, что выдает команда ps).

в новых unix'ах для этого используется псевдо-FS: /proc. Там все просто:
cd /proc; ls -l; cd 3354; cat cmdline.. В Linux и PicoBSD, если мне память
не изменяет, 'ps' работает именно через /proc

Традиционно же ps (и другие подобные вещи, скажем, netstat или top)
делается через kernel virtual memory interface (KVM).

kvm позволяет получить доступ к памяти ядра, погулять по внутренним
структурам (например, списку процессов). Интерфейс прост: kvm_open и
kvm_openfiles (позволяющие открыть не только ядро в памяти, но и мертвое
ядро на диске); kvm_read, переносящая буфер произвольной длины из памяти
ядра ко мне в приложение; kvm_write, выполняющая обратные функции;
kvm_geterr (сообщение о произошедшей ошибке); kvm_close и прочее.

В ядре много интересной информации. Hо как узнать смещения этих
структур? С помощью kvm_nlist(3) (ее аналог для обычных файлов - nlist(3)).

kvm_nlist позволяет получить адреса символических переменных. Используя
эти адреса, мы считываем в нашу память содержимое областей памяти ядра.
Примерчик:

----------------------------------------------------------------------
/* Как посмотреть load average на Solaris'е прямо в ядре */
struct nlist nlst[] ={
{"avenrun"},
{0}
};

if (kvm_nlist(kd, nlst) == -1) {
(сообщаем об ошибке; exit())
}

if (nlst->n_type == 0) {
(сообщаем об ошибке; exit())
}
----------------------------------------------------------------------

После того, как адрес массива avenrun выяснен, мы можем прочитать его
в память:

----------------------------------------------------------------------
long avenrun[3];

if (kvm_read(kd, nlst->n_value, (char *)avenrun, sizeof(avenrun)) == -1) {
(сообщаем об ошибке; exit())
}
----------------------------------------------------------------------

FreeBSD несколько облегает работу с KVM/procs, вводя дополнительные
функции: kvm_getprocs, kvm_getargv etc.

Однако kvm_read() приходится использовать часто. Пусть мы хотим
выяснить, какие сетевые соединений какими процессами используется. Пишем:

----------------------------------------------------------------------
kp = kvm_getprocs(...KERN_PROC_ALL..., &cntproc);

for( i = 0; i < cntproc; i++) {
struct filedesc filedesc;
struct file **files;
struct file file;
int fileslen;

/* Список открытых файлов */
kvm_read(kd, kp[c].kp_proc.p_fd, &filedesc, sizeof(filedesc) ..)

fileslen = filedesc.fd_nfiles*sizeof(struct file *);
files = malloc(fileslen);

/* Загружаем массив указатель на fd'ы */
kvm_read(kd, filedesc.fd_ofiles, files, fileslen);

/* Пробегаем по файлам */
for (j = 0; j < filedesc.fd_nfiles; j++, files++) {

дальше загружаем структуру 'file' для каждого fd..
kvm_read(kd, *files, &file, sizeof(struct file));

выясняем тип fd:
if (file.f_type = DTYPE_SOCKET) ...

далее загружаем file.f_data как структуру socket,
для определения socket family загружаем socket.so_proto (protosw),
загружаем protosw.pr_domain и проверяем: domain.dom_faimyly == AF_INET

sock.so_type == SOCK_DGRAM/SOCK_STREAM;

далее загружаем protocol control block (pcb) - socket.so_pcb,

и так далее, пока не выясним все, что нам интересно..

довольно нудно, конечно; /proc - удобнее; но kvm дает доступ
к чему угодно!
}
}
----------------------------------------------------------------------

в 97-м году я кидал такую программку в freebsd-hackers как пример
использования KVM. Пример вывода:

21319 tcp:ESTABLISHED aa.bb.cc.dd:1339 aa.bb.dd.ee:119
451 tcp:LISTEN aa.bb.cc.dd:80 *:*
6622 udp *:NNNN *:*

и т.д...

>Может быть кто-нибудь подскажет, как это проще сделать?

kvm_getargv() возвращает массив (а-ля argv[]), в которым указаны
параметры запуска (= командная строка). ps использует именно kvm_getargv().
Можно извлечь те же данные и руками - через kvm_read() (см. описание
структуры proc).

char **a;
a = kvm_getargv(...)
if (a) while (*a) printf("%s ", *a++);

>Пытался разобраться с исходниками ps - дохлый номер (маловато знаний).

упорство и упорство - и все получится :)

>В man как-то весьма невнятно описаны функции kvm. Где бы найти
>какое-нибудь более подробное описание, желательно с примерами.

4.4BSD Daemon Book, исходники ядра, исходные тексты программ...

V.

P.S. KVM в man pages описан нормально :)


--- ifmail v.2.15dev5
* Origin: Tver State University NOC (2:5020/400)
937 Прочтений •  [Получить список процессов из C (proc vm)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Получить список процессов из C (pro... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка