Копирование песочницы
Копирование один раз сохраняет работающую песочницу и сразу запускает одну или несколько независимых копий. У каждой копии свой идентификатор и время работы. В момент запуска файлы, процессы и память совпадают с исходной песочницей, после чего среды изменяются независимо.
mjs
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create();
const forks = [];
try {
await sandbox.files.write("/tmp/shared.txt", "state copied to each fork");
const results = await sandbox.fork({ count: 2 });
for (const result of results) {
if (result instanceof Sandbox) {
forks.push(result);
console.log(await result.files.read("/tmp/shared.txt"));
} else {
console.error(`Fork failed: ${result.message}`);
}
}
} finally {
await Promise.all(forks.map((fork) => fork.kill()));
await sandbox.kill();
}В результате есть отдельный элемент для каждой запрошенной копии. Успешный элемент содержит подключённый Sandbox, неуспешный — ошибку. Обрабатывайте все элементы, чтобы частичный сбой не скрыл уже запущенные копии.
Во время сохранения состояния исходная песочница ненадолго ставится на паузу. Потоки и внешние соединения после этого нужно подключить заново. Если состояние нужно сохранить для будущих запусков, используйте снапшоты.