0.167.37
Fixed
- Мгновенный детект PID-reuse в selfexec helper вместо 5с ожидания (A-024 — P2).
waitForParentGone(internal/tray/selfexec/helper.go) проверял живость supervisor’а только черезKill(pid, 0), который отвечает «процесс с таким PID существует»: если родитель умер, а ОС переиспользовала его PID для другого процесса, helper считал родителя живым, выжидал весьparentWaitTimeout(5с) и только потом форсительно снимал lock. Добавлена вторая проверкаos.Getppid() != parentPID: после смерти настоящего родителя helper переподчинён init/launchd, поэтому чужой ppid — доказательство смерти родителя независимо от переиспользования PID → немедленный выход. В комментарии кода разобраны граничные случаи (живой родитель всегда даёт ppid==parentPID; кейс supervisor==PID 1 в контейнере). Проверки вынесены в injectableparentAliveFn/parentPPIDFn(безt.Parallel(), прод-путь однопоточный). Тесты: PID-reuse (Kill «жив», ppid чужой) → выход за <500мс вместо 2с-таймаута; живой родитель (ppid совпадает) → честное ожидание до таймаута; реальная смерть процесса ловится alive-проверкой; ppid-несовпадение без совпадения PID → мгновенный выход.