LINUX.ORG.RU
ФорумTalks

Новый способ поставить линух колом.


0

3

1. Создать файл /tmp/test-file

2. откомпилировать и запустить

#include <errno.h>
#include <sys/inotify.h>
#include <sys/types.h>

#include <sys/stat.h>

#include <stdio.h>

int main()
{
        int fd;
        fd = inotify_init();

        int wd;

        while ((wd = inotify_add_watch(fd, "/tmp/test-file", IN_MODIFY)) >= 0) {
                inotify_rm_watch(fd, wd);

if (wd % 1000000 == 0)
                fprintf(stderr, "wd = %d\n", wd);
        }
                fprintf(stderr, "wd = %d\n", wd);

}

3. долго ждать. когда дошло до 1070M у меня процесс ушел в режиме ядра в бесконечный цикл, kill -9, естественно, не работает

★★★★★
Ответ на: комментарий от megabaks

долго, я днем запустил и сейчас увидел, что оно колом встало

Reset ★★★★★
() автор топика

Странно, мне казалось там должны быть лимиты на кол-во дескрипторов. Тогда действительно очень плохо сделано.

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

Не получилось. А вот мой способ поставить Linux колом. В рутовой консоли, когда делается что-то с длинным выводом (вроде make install), набрать rm -rf /*[Enter] Каждый символ будет появляться на новой строке, когда программа завершится, запустится удаление. Хозяин компа даже не поймёт, что я что-то сделал.

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

Ага, я в логах демона увидел, что дескрипторы растут и стал тестировать это дело. Возможно оно очищает структуры ядро, но номер постоянно инкрементирует. Но вот почему оно под конец раком встало это конечно интересно.

Reset ★★★★★
() автор топика

а мне достаточно начать копировать гиговый файл на флешку - и компилять ничего не нужно

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

> а мне достаточно начать копировать гиговый файл на флешку - и компилять ничего не нужно

Да, это реально напрягает. Флешками пользуюсь не очень часто, но все равно это ОЧЕНЬ напрягает.

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

> Что за дистр? В нормальных gcc искаропки

Даже в бубунте 11.04 — и в той уже из коробки.

fang
()

Интересно. На четвертой минуте упали иксы...
Надо будет еще попробовать запустить из консоли

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

>-1 быть не может
гарантирую

andrew@home:~$ cat 1.c
#include <errno.h>
#include <sys/inotify.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main()
{
int fd;
fd = inotify_init();
int wd;
while ((wd = inotify_add_watch(fd, «/tmp/test-file», IN_MODIFY)) >= 0) {
inotify_rm_watch(fd, wd);

if (wd % 1000000 == 0)
fprintf(stderr, «wd = %d\n», wd);
}
fprintf(stderr, «wd = %d\n», wd);

}
andrew@home:~$ cc -o this.shit 1.c
andrew@home:~$ ./this.shit
wd = -1
andrew@home:~$ uname -a
Linux home 2.6.32-5-amd64 #1 SMP Wed May 4 22:04:54 UTC 2011 x86_64 GNU/Linux
andrew@home:~$
debian 6.0 amd64 with latest aptitude update/upgrade

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

тупо может inotify_add_watch возвратить -1, изначально при первом вызове, только думаю так объясняется -1 :)

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

root@home:/home/andrew# rm -f /tmp/test-file

wd = 14000000
wd = 15000000
wd = 16000000
wd = 17000000
wd = 18000000
wd = 19000000
wd = 20000000
wd = 21000000
wd = 22000000
wd = 23000000
wd = 24000000
wd = 25000000
wd = -1
andrew@home:~$
saves cookies ;)

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

о, отпустило, через несколько минут правда

на работе сервак 16ти ядерный и 48 гигов памяти, наверно поэтому там миллиард осилило :)

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

интересная закладка получается:)
с учетом того что в более чем половине проектов используются такие include'ы
и пару-тройку строк дописать, - паранойа:)

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

сколько нам отркытий готовит спо, - плод коллективного разума:)

etwrq ★★★★★
()

Дошло до ~110000000, зависло на минуты 3, терминал(и ещё jabber-клиент) упал, да и все.

Deleted
()

Глянул сорцы. Там используется некая структура с названием idr. Комменты:

 * __Small__ id to pointer translation service.
 *
 * It uses a radix tree like structure as a sparse array indexed
 * by the id to obtain the pointer.  The bitmap makes allocating
 * a new id quick.

А id'шник inotify _всегда_ инкрементирует. Не удивительно, что оно раком встает.

Ну и как с такими феерическими косяками делать high load high availability сервисы?

Reset ★★★★★
() автор топика

Грузит полностью одно ядро. Ничего не тормозит. 4 гига памяти, 2800 МГц (amd64), Debian 6.0

pacify@optima-amd64:~/w/kill$ ./a.out 
wd = 1000000
wd = 2000000
wd = 3000000
wd = 4000000
wd = 5000000
wd = 6000000
wd = 7000000
wd = 8000000
wd = 9000000
wd = 10000000
....
wd = 35000000
wd = 36000000
....
wd = 65000000
wd = 66000000
wd = 67000000
Дальше ждать не стал (программа проработала ~пять минут).

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