2013-09-20 2 views
0

Мне нужно повторно запустить процесс повторно (отдельно). Хотел узнать, есть ли что-нибудь, что я могу сделать, чтобы избежать полного exec. Где происходит инициализация инициализированного и неинициализированного сегмента данных? Это происходит в пространстве ядра или в libc или в загрузчике? Есть ли что-нибудь, что я могу сделать, чтобы использовать тот факт, что это один и тот же двоичный файл (как исполняемый двоичный файл), который я выполняю каждый раз?Перезапуск процесса оптимизации

+0

Я бы предпочел решение, которое позволяет избежать изменения ядра, предпочтительно с использованием LD_PRELOAD или изменения кода пользовательского пространства. но если это невозможно, любое решение для изменения ядра также будет очень полезно знать. – melchi

ответ

0

Я не знаю, если это то, что вы хотите - «повторное повторение самостоятельно» меньше, чем ясно - но exec достаточно легко избежать.

Поскольку вы уже находитесь в образе программы, который хотите перезапустить, вам нужно только fork новых копий. У вас может быть главная копия, чья ответственность состоит в том, чтобы развить детей и позволить детям запустить фактический программный код, который представляет собой реальную функциональность. Что-то вроде:

while ((! done) 
{ 
    //wait on signal, fifo, socket, whatever 

    if (somethingSaysWeAreDone) 
     exit(0); 

    if (fork == 0) 
     break; 
} 

//children execute the rest of the program 

Каждый ребенок имеет чистый сланец, кроме одной или двух переменных, над которым они никогда не должны в любом случае сегментов. Я не вижу никакого способа избежать вилки, хотя, очевидно, вам нужен какой-то механизм для связи с «основной» копией, которую он должен воспроизводить.

+0

Если бы у них был доступ к источнику, не могли ли они просто поместить все в цикл и назвать это днем? Я предполагал, что у них не было источника. Или я вас не понимаю? –

+0

@ Matthew Adams, я не мог определить, к чему OP имеет доступ. Я воспользовался «или изменением кода пользовательского пространства», поскольку он имел источник, но, возможно, это не то, что он имел в виду. Если нет, игнорируйте. Без вреда. – Duck

+0

Ох. Не пытался быть критичным, просто немного смутился. –

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