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 в контейнере). Проверки вынесены в injectable parentAliveFn/parentPPIDFn (без t.Parallel(), прод-путь однопоточный). Тесты: PID-reuse (Kill «жив», ppid чужой) → выход за <500мс вместо 2с-таймаута; живой родитель (ppid совпадает) → честное ожидание до таймаута; реальная смерть процесса ловится alive-проверкой; ppid-несовпадение без совпадения PID → мгновенный выход.