сбой жесткого диска, диагностика и устранение

Вам нужно будет получить дочерний процесс от родительского. См. wait(2). Кажется, что происходит то, что вы просто обрабатываете случай, когда выполняется код дочернего процесса, и просто игнорируете результат в родительском. В результате родитель не выполняет никакой очистки после выхода дочернего элемента, и в результате происходит утечка PID.

Самое простое решение — добавить к условию ifследующий elseслучай.

else if (pid > 0) {
    int status;
    waitpid(pid, &status, 0);
}

РЕДАКТИРОВАТЬ:Приведенное выше условие блокирует родительский процесс до завершения дочернего процесса. При выходе потомка сигнал SIGCHLDотправляется родителю, и по умолчанию он игнорируется. Однако, согласно POSIX.1 -2001, если вы явно установите обработчик сигнала для SIGCHLDна SIG_IGN, тогда система автоматически очистит дочерний процесс с оговоркой, что родительский процесс ничего не знает о выходной статус ребенка.

В функцию инициализации добавьте следующий код:

signal(SIGCHLD, SIG_IGN);
0
23.11.2020, 17:19
1 ответ

Чтобы увеличить шансы на восстановление данных с этого диска, немедленно прекратите его использование. Размонтируйте его сейчас. Когда ваш новый диск прибудет, загрузите простой дистрибутив Linux в командной строке и ddrescue старый диск на новый, как описано здесь . Помните :не монтируйте никакие файловые системы со старого диска, чтобы избежать дальнейшего повреждения.

Что касается вашего вопроса об «исправлении» его форматированием --, такого понятия нет. Когда диск умирает, его уже не исправить. Да, вы можете продолжать «использовать» его, но я не понимаю, как вы можете доверять ему свои данные. Возможно, вы могли бы использовать его как подставку для пива.

1
18.03.2021, 22:47

Теги

Похожие вопросы