LINUX.ORG.RU

Uninterruptible Syscall


0

1

Здравствуйте, необходимо сэмулировать непрерываемый (даже по SIGKILL) процесс.

С операцией write единственное почти приемлимое решение - это непрерывная запись гигабайта информации (занимает порядка 20ти секунд) - между итерациями цикла (если делать в цикле по 1Гб) - прерывается

Мне нужно хотя бы минуту-две чтобы проверить реакцию мониторов, которые за этим следят. Записать больше 1Гб одной коммандой пока не получается, т.к. этот гигабайт надо выделить в памяти, что не удается сделать нормально при существенно больших объемах (надо порядка 10-20Гб непрерывной записи на моей машиня, судя по предыдущим тестам)

Если есть какие-то идеи (возможно - другой syscall, не только write) - подскажите пожалуйста


man signal как бы намекает, что это невозможно в принципе:

The signals SIGKILL and SIGSTOP cannot be caught or ignored.

Реакцию каких мониторов надо проверить? ЖК?

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

это возможно

такие зависшие процессы случаются, почитайте на вики про тот же Uninterruptible sleep и т.п. вещи

Другое дело что сэмулировать их крайне сложно - в приведенном мной примере краткосрочно процесс неубиваем, но по завершении операции записи он конечно же умирает

coyote
() автор топика

Зачем тебе это? Единственный способ - сделать свой модуль ядра.

tailgunner ★★★★★
()

вот тут есть книга по написанию драйверов.

Берешь пример драйвера символьного устройства, дописываешь в нужном вызове бесконечный цикл. Далее компилишь, загружаешь, вызываешь, и можно наслаждаться эффектом )

AF ★★★
()

Добавляешь свой syscall и оттуда явно устанавливаешь состояние в TASK_UNINTERRUPTABLE.

DELIRIUM ☆☆☆☆☆
()

Смонтируй каталог по NFS в hard режиме, записывай файл в этом каталоге и в это время выключи NFS сервер. Вполне аутентично.

bvvv
()

походу без драйвера никак.
где-нибудь в open к char dev делаешь

set_current_state = TASK_UNINTERRUPTIBLE;
while(1) schedule();

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