class Steep::Server::WorkerProcess
def self.fork_worker(type, name:, steepfile:, index:, delay_shutdown:, patterns:)
def self.fork_worker(type, name:, steepfile:, index:, delay_shutdown:, patterns:) stdin_in, stdin_out = IO.pipe stdout_in, stdout_out = IO.pipe worker = Drivers::Worker.new(stdout: stdout_out, stdin: stdin_in, stderr: STDERR) worker.steepfile = steepfile worker.worker_type = type worker.worker_name = name worker.delay_shutdown = delay_shutdown if (max, this = index) worker.max_index = max worker.index = this end worker.commandline_args = patterns pid = fork do worker.run() end pid or raise writer = LanguageServer::Protocol::Transport::Io::Writer.new(stdin_out) reader = LanguageServer::Protocol::Transport::Io::Reader.new(stdout_in) # @type var wait_thread: Thread & _ProcessWaitThread wait_thread = _ = Thread.new { Process.waitpid(pid) } wait_thread.define_singleton_method(:pid) { pid } stdin_in.close stdout_out.close new( reader: reader, writer: writer, stderr: STDERR, wait_thread: wait_thread, name: name, index: index&.[](1) ) end