LINUX.ORG.RU

Ну блин, пожалуйста помогите...


0

0

Уже просил, но безрезультатно, ещё раз прошу... Просто сам я нисколько не программист, поэтому сам такую простенькую программу не могу написать, но она мне нужна для тестирования. Вот что надо:

Нужна прога, у которой статус в STAT при команде $ ps axuf был бы DW (беспробудно спит).

Очень надо...

Всяких защит (типа переполнения буфера) и т.п. не нужно. Нужно просто чтоб она висела в памяти именно с таким статусом.

Спасибо.

anonymous

> сам такую простенькую программу не могу написать

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

Лучше вывод ps подменить, если так уж нужно для тестов.

или модуль написать, тогда типа:

int init_module(void)
{
current->->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(10 * HZ);
return -EIO;
}

теперь insmod test.o будет висеть 10 сек в D state.

Ох, тут еще и W... тогда добавить kernel_thread()
или насиловать память, пока insmod не уйдет в своп.

В общем, непонятно, зачем вам это надо.

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

Спасибо... Это и нужно было... И вот почему то мне кажется, что на ядре 2.4.22 ваш модуль будет находиться именно в состоянии DW. Но я приду и поробую... Вот я и думаю это глюк ядра или что...

Спасибо..

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

> И вот почему то мне кажется, что на ядре 2.4.22
> ваш модуль будет находиться именно в состоянии DW

Никак не должен, W означает rss == 0.
если оно и выскочит, это скорее будет
глюк ps.

Повторю, Вы можете этого добиться, загнав
процесс в swap.

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

Можно поточнее программу написать, вот что я сделал:

#define __KERNEL__
#define MODULE
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/interrupt.h>

int init_module(void)
{
current->->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(10 * HZ);
return -EIO;
}

а командой
$ gcc test.c
не хочет компиляться.

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

Текст модуля:

#define __KERNEL__
#define MODULE
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/interrupt.h>

int init_module(void)
{
current->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(10 * HZ);
return -EIO;
}



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

Вот что выдаёт gcc test.c

In file included from /usr/include/linux/fs.h:23,
from /usr/include/linux/capability.h:17,
from /usr/include/linux/binfmts.h:5,
from /usr/include/linux/sched.h:9,
from test.c:6:
/usr/include/linux/string.h:8:2: warning: #warning Using kernel header in userland!
In file included from /usr/include/linux/sched.h:14,
from test.c:6:
/usr/include/linux/timex.h:173: field `time' has incomplete type
In file included from /usr/include/linux/bitops.h:69,
from /usr/include/asm/system.h:7,
from /usr/include/linux/sched.h:16,
from test.c:6:
/usr/include/asm/bitops.h:327:2: warning: #warning This includefile is not available on all architectures.
/usr/include/asm/bitops.h:328:2: warning: #warning Using kernel headers in userspace: atomicity not guaranteed
In file included from /usr/include/linux/signal.h:4,
from /usr/include/linux/sched.h:25,
from test.c:6:
/usr/include/asm/signal.h:107: parse error before "sigset_t"
/usr/include/asm/signal.h:110: parse error before '}' token
In file included from /usr/include/linux/sched.h:81,
from test.c:6:
/usr/include/linux/timer.h:45: parse error before "spinlock_t"
/usr/include/linux/timer.h:53: parse error before '}' token
/usr/include/linux/timer.h:67: parse error before "tvec_base_t"
/usr/include/linux/timer.h:101: parse error before "tvec_bases"
/usr/include/linux/timer.h: In function `init_timer':
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:106: dereferencing pointer to incomplete type
/usr/include/linux/timer.h: In function `timer_pending':
/usr/include/linux/timer.h:121: dereferencing pointer to incomplete type
In file included from test.c:7:
/usr/include/linux/interrupt.h:44:25: asm/hardirq.h: No such file or directory
/usr/include/linux/interrupt.h:45:25: asm/softirq.h: No such file or directory
In file included from test.c:7:
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:77: parse error before '(' token
/usr/include/linux/interrupt.h:78: parse error before '(' token
/usr/include/linux/interrupt.h:106: parse error before "atomic_t"
/usr/include/linux/interrupt.h:109: parse error before '}' token
/usr/include/linux/interrupt.h:127: `CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
/usr/include/linux/interrupt.h:127: requested alignment is not a constant
/usr/include/linux/interrupt.h:154: parse error before '(' token
/usr/include/linux/interrupt.h: In function `tasklet_schedule':
/usr/include/linux/interrupt.h:158: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:162: parse error before '(' token
/usr/include/linux/interrupt.h: In function `tasklet_hi_schedule':
/usr/include/linux/interrupt.h:166: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_disable_nosync':
/usr/include/linux/interrupt.h:173: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_enable':
/usr/include/linux/interrupt.h:187: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_hi_enable':
/usr/include/linux/interrupt.h:193: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:224: parse error before "global_bh_lock"
/usr/include/linux/interrupt.h: In function `mark_bh':
/usr/include/linux/interrupt.h:228: invalid use of undefined type `struct tasklet_struct'
test.c: In function `init_module':
test.c:11: `current' undeclared (first use in this function)
test.c:11: (Each undeclared identifier is reported only once
test.c:11: for each function it appears in.)
test.c:13: `EIO' undeclared (first use in this function)

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

То же самое.. Но это уже не важно, я на примере Makefile написал для test так что компилится просто make, но вот интересные наблюдения... Про них в следующем топике...

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