Подтвердить что ты не робот

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

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

CODE

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;
}
4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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