Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отслеживание процесса в unix по имени, как работать с task_struct 
:(
    Опции темы
zhekha
Дата 29.2.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



Информацию о процессах в системе такие софтинки как ps, top берут из /proc и в случае если последняя не примонтирована, то данные утилитки не работают.

Хочется не зависеть от этого и получить список процессов и параметры этих процессов (интересует имя, пид, статус и виртуальная память)

Нашел описание task_struct и несколько примеров вида
Код

#include <linux/kernel.h>
#include <linux/sched.h>

struct task_struct * find_task_by_name(const char* name) {

    struct task_struct *p;

    for_each_task(p)
        if(strcmp(p->comm, name) == 0) return p;

        return 0;
}

но никак не могу вкурить как заставить это работать и где вообще эти хидеры (sched.h, kernel.h)... 
Такие хидеры есть в /usr/include, но описания struct task_struct в них нету, соответственно компиллятор говорит "error: ‘for_each_task’ was not declared in this scope", хотя на task_struct не ругается...

ОС Ubuntu 10.04 LTS (kernel 2.6.32-38-generic)

Может кто работал с такими штуками?

Это сообщение отредактировал(а) zhekha - 29.2.2012, 14:03
PM MAIL   Вверх
boostcoder
Дата 29.2.2012, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



это код модуля ядра. соответственно, работать он будет только в качестве модуля ядра.
PM WWW   Вверх
zhekha
Дата 29.2.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



Т.е. если не модуль ядра - то только парсить /proc ?

А если модуль ядра - то скомпиллировать-то его как?

Второй вопрос снят - нашел (типа make -C /usr/src/linux-2.6.18 SUBDIRS=$PWD modules)

Это сообщение отредактировал(а) zhekha - 29.2.2012, 14:31
PM MAIL   Вверх
boostcoder
Дата 29.2.2012, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



PM WWW   Вверх
zhekha
Дата 29.2.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



boostcoder, спасибо!

зы
В очередной раз убеждаюсь, что не очень хорошо умею пользоваться поиском... :'(
PM MAIL   Вверх
xvr
Дата 29.2.2012, 15:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(zhekha @  29.2.2012,  14:23 Найти цитируемый пост)
А если модуль ядра - то скомпиллировать-то его как?

А может не стоит? Это всетаки будет часть ядра ОС, а в нем малейшая ошибка не только напечатает вам не то, что хотелось, но и уронит всю машину так, что мало не покажется  smile 
Лучше примонтировать /proc  smile 

PM MAIL   Вверх
tzirechnoy
Дата 29.2.2012, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Особо тонкие цэнители могут взять подход BSD: открывать /dev/mem (ну, в BSD вроде открывается /dev/kcore -- но у нас без /proc его нету, кажэтся), и в нём на основании знания структуры task_struct и известных символов ядра (хм. insmod ведь их откуда-то вроде получает? файлик ksyms я, опять жэ, видел)напрямую искать эту информацыю.

Но да, развлечение достаточно безсмысленное, а для новичка -- и очень тяжёлое.
Но развлекательное.
PM MAIL   Вверх
xvr
Дата 1.3.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(tzirechnoy @  29.2.2012,  18:20 Найти цитируемый пост)
и в нём на основании знания структуры task_struct

Для этого нужно знать точную версию ядра, т.к. эта структура описанна только в кернельных хидерах, и из работающего Linux'а без сорцов ее вытащить неоткуда (ни в /dev ни в /sys ни в /proc ее нет)

Цитата(tzirechnoy @  29.2.2012,  18:20 Найти цитируемый пост)
и известных символов ядра (хм. insmod ведь их откуда-то вроде получает?

insmod этим не занимается - его дело загрузить файл в память и позвать ядро. Линковкой (и извлечением символов) занимается само ядро.
Возможно его символы и можно вытащить, но только через /proc (скорее всего).
 
Цитата(tzirechnoy @  29.2.2012,  18:20 Найти цитируемый пост)
Но да, развлечение достаточно безсмысленное, а для новичка -- и очень тяжёлое.
Но развлекательное. 

Это точно. Вспоминается известный анекдот, про "в гаммаке и стоя"  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1221 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.