static void inf_ptrace_detach (struct target_ops *ops, const char *args, int from_tty) { pid_t pid = ptid_get_pid (inferior_ptid); int sig = 0; if (from_tty) { char *exec_file = get_exec_file (0); if (exec_file == 0) exec_file = ""; printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file, target_pid_to_str (pid_to_ptid (pid))); gdb_flush (gdb_stdout); } if (args) sig = atoi (args); #ifdef PT_DETACH /* We'd better not have left any breakpoints in the program or it'll die when it hits one. Also note that this may only work if we previously attached to the inferior. It *might* work if we started the process ourselves. */ errno = 0; ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, sig); if (errno != 0) perror_with_name (("ptrace")); #else error (_("This system does not support detaching from a process")); #endif inferior_ptid = null_ptid; detach_inferior (pid); inf_child_maybe_unpush_target (ops); }
void inf_child_mourn_inferior (struct target_ops *ops) { generic_mourn_inferior (); inf_child_maybe_unpush_target (ops); }