LINUX.ORG.RU
Ответ на: комментарий от idle

idle:

>а что, есть такой ps? что-то я не вижу способа это сделать.

Конечно. Открываешь /dev/kmem и начинаешь ковырять, ковырять, ковырять. :) В некоторых UNIX ps так и работает.

Murr ★★
()
Ответ на: комментарий от Murr

> Конечно. Открываешь /dev/kmem и начинаешь ковырять, ковырять, ковырять.

ну да, я как раз собирался написать "если, конечно,
не заниматься хакерскими штучками c kmem", но передумал.

только этот ps должен называться как нибудь так:
ps_which_works_sometimes :)

idle ★★★★★
()
Ответ на: комментарий от idle

Почему "самтаймс"? Зависит от архитектуры системы.

И не обязательно хак. Если ядро аккуратно експортирует нужные символы
и аккуратно работает со структурами, то все должно быть ок.

Естественно, операция чтения таблицы процессов неатомарна. Но, как известно, чтение директории тоже неатомарно, но с ней уже давно научились бороться. %)

Murr ★★
()
Ответ на: комментарий от Murr

> Но, как известно, чтение директории тоже неатомарно, но с ней уже давно научились бороться. %)

если можно в двух словах, как именно ?

anonymous
()
Ответ на: комментарий от cvv

cvv - да это не проблема, это способ выдергивания данных из кернеля

под linux в большинстве своем данные експортятся через /proc в текстовом формате, в bsd,sunos,etc используется kvm - способ выдергивания чистых кернелевских данных через mem/kmem

и как Murr правильно когда-то заметил что с данными из /proc легче работать скриптам, а с чистыми данным из mem/kmem проще работать прогам на C

lg ★★
()
Ответ на: комментарий от lg

а отчего ж такого сказочного механизма kmem нет в linux?

anonymous
()
Ответ на: комментарий от lg

Спасибо

ЗЫ: народ чё з сайтом у меня за два дня два сообщения непонятно куда делись. Раньше такого небыло

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

anonymous:

Идея примерно такая: пока один читает директорию (фрагментарно, последовательными вызовами getdents), другой может многократно ее изменить.

Linux использует версионирование открытой (f_version) и настоящей(i_version) директории. При изменении настоящей директории ее версия меняется(например, увеличивается на единицу). Если после очередного чтения версии не совпали, то значит директория была изменена с момента открытия и можно начинать читать сначала :) (ну или просто подкорректировать f_pos читающему).

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.