Messages in this thread | | | Subject | Re: [PATCH] ptrace on stopped processes (2.4) | From | OGAWA Hirofumi <> | Date | Fri, 18 Jan 2002 04:23:24 +0900 |
| |
vic <zandy@cs.wisc.edu> writes:
> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>: > >> --- linux-2.4.16/kernel/ptrace.c Wed Nov 21 16:43:01 2001 > >> +++ linux-2.4.16.1/kernel/ptrace.c Fri Dec 21 10:42:44 2001 > >> @@ -89,8 +89,10 @@ > >> SET_LINKS(task); > >> } > >> write_unlock_irq(&tasklist_lock); > >> - > >> - send_sig(SIGSTOP, task, 1); > >> + if (task->state != TASK_STOPPED) > >> + send_sig(SIGSTOP, task, 1); > >> + else > >> + task->exit_code = SIGSTOP; > >> return 0; > >> > >> bad: > > > > It seems that trace is started in the place different from > > usual. Then, I think PTRACE_KILL doesn't work. > > I don't agree, it seems to work for me.
I tested the following on linux-2.4.16 + your_patch:
#include <stdio.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/ptrace.h> #include <unistd.h>
int main(int argc, char *argv[]) { pid_t pid; int ret, status;
pid = fork(); if (pid == -1) exit(1); if (pid == 0) { raise(SIGSTOP); while (1) ; _exit(1); }
ret = waitpid(pid, &status, WUNTRACED); if (ret == -1) { perror("waitpid (1)"); exit(1); }
ret = ptrace(PTRACE_ATTACH, pid, NULL, NULL); if (ret == -1) { perror("PTRACE_ATTACH"); exit(1); } ret = waitpid(pid, &status, 0); if (ret == -1) { perror("waitpid (2)"); exit(1); } ret = ptrace(PTRACE_KILL, pid, NULL, NULL); if (ret == -1) { perror("PTRACE_KILL"); exit(1); }
return 0; }
Test result:
hirofumi@devron (ptrace)[1111]$ ps ax|grep ptrace 688 tty1 S 0:00 grep ptrace hirofumi@devron (ptrace)[1112]$ ls ptrace ptrace.c hirofumi@devron (ptrace)[1113]$ ./ptrace hirofumi@devron (ptrace)[1114]$ ps ax|grep ptrace 691 tty1 R 0:04 ./ptrace 693 tty1 S 0:00 grep ptrace hirofumi@devron (ptrace)[1115]$
Do I misunderstand something? -- OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |