int StartSubprocess(const char *name, SubprocessType type, SubprocessProtocol protocol) { D("starting %s subprocess (protocol=%s): '%s'", type == SubprocessType::kRaw ? "raw" : "PTY", protocol == SubprocessProtocol::kNone ? "none" : "shell", name); Subprocess* subprocess = new Subprocess(name, type, protocol); if (!subprocess) { LOG(ERROR) << "failed to allocate new subprocess"; return -1; } if (!subprocess->ForkAndExec()) { LOG(ERROR) << "failed to start subprocess"; delete subprocess; return -1; } D("subprocess creation successful: local_socket_fd=%d, pid=%d", subprocess->local_socket_fd(), subprocess->pid()); return subprocess->local_socket_fd(); }
void commandDiscarded(const Subprocess& s, const string& cmd) { VLOG(1) << "'" << cmd << "' is being discarded"; os::killtree(s.pid(), SIGKILL); }