Как заставить программу перезагружаться сама? (Процесс 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() для запуска новой независимой копии, вероятно, является лучшим вариантом, избавляя вас от необходимости иметь эта копия монитора сидит.