function process.spawn(f, env, name, path) checkArg(1, f, "function") checkArg(2, env, "table", "nil") checkArg(3, name, "string", "nil") checkArg(4, path, "string", "nil") local process = findProcess() if process then env = env or process.env end if not path then path = '<function>' end env = setmetatable({}, {__index=env or _G}) local thread = coroutine_create(f) running[thread] = { path = path, command = name, env = env, data = setmetatable({}, {__index=process and process.data or nil}), parent = process, instances = setmetatable({}, {__mode="v"}) } return thread end