Как ядро Linux читает proc/pid файл?

Обходное решение, которое может достигнуть, который должен добавить фильтр сервлета, чтобы сделать перезаписи URL, например, перезапись NEXTEVENT к/NEXTEVENT / (тот перед NEXTEVENT) / (тот после NEXTEVENT) или что-то подобное.

5
задан Iguramu 22 November 2009 в 00:33
поделиться

3 ответа

/ proc является псевдофайловой системой, что означает, что ее содержимое не является «реальными» файлами. Вместо этого содержимое является представлением внутренних структур данных ядра. Следовательно, ядру не нужно читать их - оно уже может получить доступ к данным напрямую.

/ proc используется программами пользовательского режима (т.е. неядерными), такими как ps , чтобы узнать (например) о процессах, запущенных в системе. Существует справочная страница , которая описывает многое из того, что доступно.

8
ответ дан 13 December 2019 в 05:37
поделиться

Посмотрите в вашем каталоге / proc, там есть виртуальный файл, в котором перечислены все процессы, запущенные в системе, даже двоичная программа ps фактически открывает этот файл в каталоге / proc для вывода списка процессов / pid ..

Linux ProcFs Guide Linux Proc Filesystem as a Programmer's Tool

1
ответ дан 13 December 2019 в 05:37
поделиться

Вы ищете в нужном месте.

В частности, функция proc_pid_readdir () в fs / proc / base.c используется для заполнения списка записей pid при чтении корневого каталога / proc . Вы можете увидеть основной цикл, охватывающий все процессы и задачи в этой функции:

ns = filp->f_dentry->d_sb->s_fs_info;
iter.task = NULL;
iter.tgid = filp->f_pos - TGID_OFFSET;
for (iter = next_tgid(ns, iter);
     iter.task;
     iter.tgid += 1, iter = next_tgid(ns, iter)) {
    filp->f_pos = iter.tgid + TGID_OFFSET;
    if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
        put_task_struct(iter.task);
        goto out;
    }
}
3
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: