execstub

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package execstub — исполняемый двойник, которого проба пишет и тут же запускает.

Почему не `os.WriteFile(…, 0o700)`

Ядро отвечает на запуск файла ETXTBSY («Text file busy»), пока у его inode есть открытый дескриптор записи — в любом процессе. Проба закрывает свой дескриптор до запуска, но соседняя параллельная проба того же процесса может успеть сделать `fork` в окне между открытием и закрытием: ребёнок наследует копию дескриптора и держит её до своего `exec` (O_CLOEXEC закрывает её лишь там). Запуск двойника в этот промежуток и падает ETXTBSY — отказ пробы, которого её предмет не вызывал (kaname#893: `bad interpreter: Text file busy` у двойника `gh` в TestImageProducerTagsALineHeadLikeTheTrunk).

Переименование временного файла само по себе не спасает: ETXTBSY — свойство inode, а не имени, и переименованный файл — тот же inode. Спасает `syscall.ForkLock`: `fork` в Go берёт его на запись, поэтому окно записи под блокировкой на чтение не застаёт ни одного порождения. Временный файл с переименованием добавляет второе: двойник по итоговому имени появляется только целиком.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Write

func Write(t testing.TB, path, body string)

Write кладёт исполняемый двойник `body` по пути `path`, создавая каталог. Отказ записи — отказ пробы.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL