Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

 

    for(;;);

 

}

Новый обработчик сигнала SIGUSR1 просто завершит выполнение демона, вызвав функцию exit:

void stop_daemon()

{

    exit(0);

}

Получаем исполняемый файл и запускаем его на выполнение:

# gcc -o sfc sfc.c

# ./sfc

Процесс начинает свое выполнение в фоновом режиме. Найдем его в списке процессов:

# ps -ax | grep sfc

 

903 ?      R      0:02 ./sfc

Итак, процесс ./sfc успешно выполняется, и его PID равен 903.

Теперь приступим к реализации модуля ядра.

/* Файл task.c */

#include <linux/config.h>

#include <linux/module.h>

#include <linux/slab.h>

#include <linux/sched.h>

#include <linux/types.h>

#include <linux/signal.h>

Первое, что должен сделать модуль после загрузки, – найти в списке структур struct task_struct структуру, соответствующую процессу sfc. Поиск выполняется при помощи функции find_task_by_name(). Аргументом функции является имя искомого процесса, возвращаемое значение – указатель на структуру процесса struct task_ struct.

Функция find_task_by_name выглядит следующим образом:

struct task_struct * find_task_by_name(__u8 *name)

{

    struct task_struct *p;

 

    for_each_task(p)

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

 

    return 0;

}

Для прохождения всего списка процессов в системе предусмотрен макрос for_each_task(p) (см. файл <linux/sched.h>):

#define for_each_task(p) for (p = &init_task ; (p = p->next_task) != &init_task ; )

Функция find_task_by_name будет вызвана во время процедуры инициализации модуля:

static int __init task_on(void)

{

    struct task_struct *p;

    int pid = 0;

    int i;


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180]
[181] [182] [183] [184] [185] [186] [187]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100