Как заставить программу перезагружаться сама?(Процесс Linux) - PullRequest
17 голосов
/ 29 ноября 2011

Я пытаюсь перезапустить мою программу, но, похоже, ничего не работает.Я пытался использовать fork(), но после убийства parent процесс child тоже был убит.*

void sigup_handler(int signum) {
    int pid = fork();
    if (pid == 0) {
        execve("prog2", NULL); 
    }
    else
        kill(getpid(), SIGTERM);
}

int main() {
    puts("Program 2 started.");
    signal(SIGHUP, sigup_handler);
    sleep(50); 
    puts("Program 2 terminated.");
    return 0;
}

Ответы [ 3 ]

12 голосов
/ 29 ноября 2011

Зачем беспокоиться о fork, если вы просто собираетесь kill parent?Просто сделай exec.Новый экземпляр программы будет таким же процессом, но будет эффективно перезагружен.

4 голосов
/ 29 ноября 2011

Используйте 2 уровня разветвления.Родительское приложение «монитор», которое разветвляет детей и контролирует их статус.Если ребенок умирает, монитор запускает новый.Затем дети сами разрабатывают все, что им нужно.

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

0 голосов
/ 15 января 2016

Вы можете использовать daemon (3) , за которым следует execve (2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...