Как заставить программу перезагружаться сама? (Процесс Linux)

Я пытаюсь заставить мою программу перезапустить себя, но, похоже, ничего не работает. Я пытался с помощью 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 ответа

Решение

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

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

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

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

Другие вопросы по тегам