toolchain: make_hdd.sh — закрывать mtools ОБА канала запроса, не один
Прошлая правка убрала только управляющий терминал (os.setsid), и mmd переключился на stdin: lsof показал fd 0 = /dev/ttys002, процесс снова спал, теперь уже после отметки «копирование файлов». Каналов, откуда mtools может ждать ответ, два — /dev/tty и stdin — и закрывать надо оба. Обёртка mt() теперь и создаёт новую сессию, и подаёт stdin из /dev/null. Проверено: с stdin=/dev/null mmd на свежем образе отрабатывает с кодом 0, а на уже существующем каталоге честно возвращает 1 и ничего не спрашивает. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,8 +47,14 @@ export MTOOLSRC="$MTC" MTOOLS_SKIP_CHECK=1
|
|||||||
# тогда открыть /dev/tty нечего и mtools идёт неинтерактивным путём.
|
# тогда открыть /dev/tty нечего и mtools идёт неинтерактивным путём.
|
||||||
#
|
#
|
||||||
# setsid(1) в macOS нет, поэтому делаем то же самое питоном.
|
# setsid(1) в macOS нет, поэтому делаем то же самое питоном.
|
||||||
|
# Каналов, откуда mtools может ждать ответ, ДВА, и закрывать надо оба:
|
||||||
|
# /dev/tty — убирается новой сессией (os.setsid);
|
||||||
|
# stdin — убирается перенаправлением из /dev/null.
|
||||||
|
# Закрыть только один недостаточно: с одним лишь setsid mmd переключался на
|
||||||
|
# stdin и вис уже на нём (lsof: fd 0 = /dev/ttys002).
|
||||||
mt() {
|
mt() {
|
||||||
python3 -c 'import os,sys; os.setsid(); os.execvp(sys.argv[1], sys.argv[1:])' "$@"
|
python3 -c 'import os,sys; os.setsid(); os.execvp(sys.argv[1], sys.argv[1:])' \
|
||||||
|
"$@" < /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# MBR + раздел 1 на весь диск (тип FAT16), затем формат FAT16.
|
# MBR + раздел 1 на весь диск (тип FAT16), затем формат FAT16.
|
||||||
|
|||||||
Reference in New Issue
Block a user