2016-05-30 7 views
2

Мне недавно был задан вопрос о том, на чей ответ мне интересно узнать, хотя я не мог ответить во время самого интервью: данный пользователь A и пользователь B выполняли свои задачи на сервере ubuntu 12.04, пользователь root. Пользователь A работает с mongodb с 52,2% использования памяти. Есть ли программа на python, которую пользователь B может запускать, так что программа пользователя A завершается или сама убивает.Программа интенсивной памяти Python

Моя попытка: я попытался прочитать очень большой файл в памяти как пользователь B. Однако при этом сама программа пользователя B прекращается или убивается операционной системой. Есть ли способ убить программу интенсивного использования памяти другого пользователя в качестве пользователя без полномочий root?

Интервьюер дал мне подсказку ... он сказал, что если ваш процесс (пользовательский B) более интенсивный в памяти, чем пользователь A, тогда процесс пользователя A автоматически будет убит когда-нибудь. Но я не могу понять, как я могу создать такую ​​интенсивную память.

+0

Вид дубликата http://superuser.com/questions/137207/how-to-kill-a-process-started-with-a-different-user-without-being-root- or-sudoer –

+0

@PeterNimroot Я прочитал этот вопрос и ответ, прежде чем публиковать его. Однако это не устраивает мои потребности :) –

+0

Ну, да, но вы не можете многое сделать. Зная, что mongodb размещен на локальном хостинге, вы можете попробовать сделать это или что-то подобное, однако вы не можете отправлять сигналы POSIX в процесс другого пользователя, если вы не root или sudoer. И сервис DoSing на localhost не имеет смысла, поэтому этот вопрос интервью кажется для меня бессмыслицей. –

ответ

2

В большинстве современных (современных) операционных систем используется защита памяти. Они не позволяют одному процессу получить доступ к памяти другого процесса, как правило. Это предотвращает использование приложения с большой памятью из памяти, выделенной другими процессами. Данные, загруженные в память, будут записаны в файл подкачки, как только закончится физическая память. Как только файл подкачки также будет заполнен, операционная система убьет этот процесс.

Для того чтобы UserB мог убить процесс UserA, ему пришлось бы использовать оставшуюся доступную память и свопировать. Как только процесс UserA потребует больше памяти, ОС убьет его, чтобы защитить процесс UserB.

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

kill_list = [] 
try: 
    while True: 
     kill_list.append(1) 
except MemoryError: 
    pass 

Это должно быть сделано. Это займет столько же памяти, сколько может, если ОС не убьет его. Теперь подождать ...

+0

Да и нет. «OOM Killer должен выбрать« лучший »процесс для уничтожения.« Лучшее »здесь относится к этому процессу, который освободит максимальную память при убийстве и также наименее важна для системы», так что это также зависит от приоритета и приятности процесса. –

+0

да, а процесс UserA использует 52% памяти – saq7

+0

К сожалению, мы не имеем представления о том, что является приоритетом процесса mongodb, поэтому это может быть причиной того, что такой подход не работал для OP (его процесс был убит OOM) –

Смежные вопросы