=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/pmdb/Attic/pmdb.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** src/usr.bin/pmdb/Attic/pmdb.c 2002/06/05 18:02:27 1.7 --- src/usr.bin/pmdb/Attic/pmdb.c 2002/06/09 02:44:13 1.8 *************** *** 1,4 **** ! /* $OpenBSD: pmdb.c,v 1.7 2002/06/05 18:02:27 fgsch Exp $ */ /* * Copyright (c) 2002 Artur Grabowski * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: pmdb.c,v 1.8 2002/06/09 02:44:13 todd Exp $ */ /* * Copyright (c) 2002 Artur Grabowski * All rights reserved. *************** *** 81,87 **** { extern char *__progname; ! fprintf(stderr, "Usage: %s [-c core] args\n", __progname); exit(1); } --- 81,87 ---- { extern char *__progname; ! fprintf(stderr, "Usage: %s [-c core] [-p pid] args\n", __progname); exit(1); } *************** *** 92,111 **** int i, c; int status; void *cm; ! char *pmenv, *core; int level; if (argc < 2) { usage(); } core = NULL; ! while ((c = getopt(argc, argv, "c:")) != -1) { switch(c) { case 'c': core = optarg; break; case '?': default: usage(); --- 92,118 ---- int i, c; int status; void *cm; ! char *pmenv, *core, *perr; int level; + pid_t pid; if (argc < 2) { usage(); } core = NULL; + pid = 0; ! while((c = getopt(argc, argv, "c:p:")) != -1) { switch(c) { case 'c': core = optarg; break; + case 'p': + pid = (pid_t) strtol(optarg, &perr, 10); + if(*perr != '\0') + errx(1, "invalid PID"); + break; case '?': default: usage(); *************** *** 126,132 **** asprintf(&pmenv, "%d", level); setenv("IN_PMDB", pmenv, 1); ! ps.ps_pid = 0; ps.ps_state = NONE; ps.ps_argc = argc; ps.ps_argv = argv; --- 133,139 ---- asprintf(&pmenv, "%d", level); setenv("IN_PMDB", pmenv, 1); ! ps.ps_pid = pid; ps.ps_state = NONE; ps.ps_argc = argc; ps.ps_argv = argv; *************** *** 308,317 **** { struct pstate *ps = arg; ! ps->ps_flags |= PSF_KILL; ! if (process_kill(ps)) ! return 1; ps->ps_state = TERMINATED; return 1; --- 315,330 ---- { struct pstate *ps = arg; ! if ((ps->ps_flags & PSF_ATCH)) { ! if ((ps->ps_flags & PSF_ATCH) && ! ptrace(PT_DETACH, ps->ps_pid, NULL, 0) < 0) ! err(1, "ptrace(PT_DETACH)"); ! } else { ! ps->ps_flags |= PSF_KILL; ! if (process_kill(ps)) ! return 1; ! } ps->ps_state = TERMINATED; return 1;