---
name: macos_replaced_binary_killed
description: "macOS убивает бинарник, записанный поверх уже запускавшегося файла (Killed: 9) — копировать надо под новым именем или через переименование"
metadata: 
  node_type: memory
  type: reference
  originSessionId: cf75944b-cc91-4988-aab6-28363391917a
  modified: 2026-08-07T16:51:28.677Z
---

Поймано 07.08.2026 на mac mini при обновлении [[cehoproxy_overview]].

`scp` положил новую сборку **поверх** `/tmp/cehoproxy`, который до этого уже запускали. Запуск сразу дал `Killed: 9` без единого слова. Файл при этом побайтово совпадал с оригиналом (одинаковый sha256), подпись на месте, `codesign -dv` доволен. Тот же самый файл, скопированный под другим именем, запустился нормально.

Причина: на Apple Silicon ядро проверяет подпись по странице кода, а запись поверх уже отображённого файла ломает эту проверку — процесс убивается сигналом без объяснений.

**Правило:** обновлять исполняемый файл на macOS только так — скачать рядом, `File.Move` старый в сторону, `File.Move`/`File.Copy` новый на его место. Новый inode → подпись цела. Прямая запись поверх (`cp`, `scp`, `>` ) — не годится, даже если файл сейчас не запущен.

В самом продукте это сделано верно: `Updater.InstallAsync` качает в `.new`, отодвигает старый в `.old` и переносит новый; `Installer.Install` — так же. Проверено чтением кода после инцидента, чтобы `chp update` не окирпичил установку на маке.
