Ответ 1
Зачем беспокоиться с fork
, если вы просто собираетесь kill
parent
? Просто выполните exec
. Новый экземпляр программы по-прежнему будет тем же самым процессом, но будет эффективно перезагружен.
Я пытаюсь перезагрузить мою программу, но ничего не работает. Я попытался использовать 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;
}
Зачем беспокоиться с fork
, если вы просто собираетесь kill
parent
? Просто выполните exec
. Новый экземпляр программы по-прежнему будет тем же самым процессом, но будет эффективно перезагружен.
Используйте 2 уровня разветвления. Родительское "мониторное" приложение, которое разворачивает детей и контролирует их статус. Если ребенок умирает, монитор запускает новый. Затем дети делают свою собственную разметку, чтобы делать то, что они должны делать.
Однако, если вам не нужна "новая" копия приложения, чтобы иметь такое же состояние, как и убитое, использование exec() для запуска новой независимой копии, вероятно, является лучшим вариантом, чтобы иметь такую копию монитора, сидящую вокруг.
Вы можете использовать daemon (3), за которым следует execve (2)