Messages in this thread |  | | | From | Pedro Alves <> | | Subject | Re: Why I want PTRACE_O_TRACESTOP option | | Date | Sat, 10 Sep 2011 12:20:54 +0100 |
| |
On Saturday 10 September 2011 02:17:03, Denys Vlasenko wrote: > On Saturday 10 September 2011 01:09, Indan Zupancic wrote: > > On Fri, September 9, 2011 18:26, Oleg Nesterov wrote: > > > On 09/09, Indan Zupancic wrote: > > >> > > >> It is very useful to set options atomically at SEIZE time. > > > > > > Nobody argues with this. > > > > > >> Another important reason to make PTRACE_O_TRACESTOP an option is > > >> because not everyone uses SEIZE: Users using PTRACE_TRACEME can't > > >> set this option at all. > > > > > > Yes. This was already discussed, PTRACE_TRACEME obviously doesn't > > > work if you need the new features. So far it was decided TRACEME > > > should be avoided, > > > > How do you want to attach/seize a just forked child without races > > in a less ugly way than with TRACEME? > > I needed to do it when I was adding usage of SEIZE to strace. > It goes like this: > > - fork > - child: raise(SIGSTOP) > - parent: waits until it sees child stopping > - parent: seizes the child > - parent: kill(child, SIGCONT)
You can do without SIGSTOP/signals:
- pipe - fork - child: block reading pipe - parent: seizes the child - parent: whatever else needs doing (e.g, interrupt and set options if not already done at seize time) - parent: close the pipe - child: notices pipe closed, moves on.
GDB already does something similar for other OSs (darwin/OSX, ttrace/HP-UX).
-- Pedro Alves
|  |