[erlang-questions] Kill a process tree

June Kim <>
Sun Apr 22 16:33:07 CEST 2007


My original purpose of all this is, to make a test runner, which runs
a given function, which in turn might create a group of
processes(which may not be linked to each other) and then kill all of
them after a certain amount of time. The function under test could be
written without the specific consideration of being run with the test
runner.

Okay. There seems to be a way out.

I happened to learn that there is a way of compile-time code AST
modification in Erlang. Maybe I could do something like...:
 * replace all spawn/* calls with my reg_spawn/* in a specific module
we want to run (and kill at once)
 * In reg_spawn, we spawn a process and register the pid to a global dictionary
 * after running the module, we kill all the processes that are
registered in the global dictionary.

So no source code modification manually. Does it sound right?

Where can I get more info on that "parse transform"?

2007/4/21, June Kim <>:
> Sorry for my mistake,
>
> 2007/4/21, June Kim <>:
> > If only I could programmatically replace(not search and replace on the
> > source code) spawn calls in the code with spawn_link... then I may
> > kill the originator process and kill all the family.
>
> In this case, there would be unexpected side effects: since the
> processes are linked to each other, one process' death would affect
> other processes, which wouldn't with the original code.
>
> It's more complexed.
>
> >
> > 2007/4/21, June Kim <>:
> > > 2007/4/21, Ulf Wiger (TN/EAB) <>:
> > > >
> > > > If the processes were linked to each other and
> > > > not trapping exits, then killing the root should
> > > > kill the others as well.
> > > >
> > > > But you claim that they are not linked...
> > > > I wonder what makes it a tree, then.
> > > >
> > > > You could call processes(), and traverse the list
> > > > looking for some common element, perhaps
> > > > initial_call?
> > > >
> > > > E.g.
> > > >
> > > > 1> [P || {P,{initial_call,IC}} <-
> > > >   [{P1,process_info(P1,initial_call)} ||
> > > >     P1 <- processes()],
> > > >     IC == {proc_lib,init_p,5}].
> > > > [<0.4.0>,
> > > >  <0.7.0>,
> > > >  <0.9.0>,
> > > >  <0.10.0>,
> > > >  <0.11.0>,
> > > >  <0.14.0>,
> > > >  <0.16.0>,
> > > >  <0.17.0>,
> > > >  <0.19.0>,
> > > >  <0.24.0>,
> > > >  <0.25.0>,
> > > >  <0.28.0>,
> > > >  <0.30.0>,
> > > >  <0.31.0>,
> > > >  <0.32.0>,
> > > >  <0.33.0>,
> > > >  <0.34.0>]
> > > >
> > > > Without knowing anything about how the processes
> > > > relate to each other, it's a bit difficult to
> > > > give advice.
> > > >
> > > > BR,
> > > > Ulf W
> > >
> > > Thank you for the tip but it won't work.
> > >
> > > What I want to do is take a abitrary function and run it as a new
> > > process inside a sandbox containment and then kill all the processes
> > > that originated from the function after a while.
> > >
> > > Maybe I'm looking for a wrong path in Erlang?
> > >
> > > >
> > > > > -----Original Message-----
> > > > > From: 
> > > > > [mailto:] On Behalf Of June Kim
> > > > > Sent: den 20 april 2007 18:30
> > > > > To: 
> > > > > Subject: [erlang-questions] Kill a process tree
> > > > >
> > > > > Suppose I spawned a process and let's call it "root".
> > > > >
> > > > > root will probably spawn a few children, and those children,
> > > > > in turn, would spawn a few grand-children.
> > > > >
> > > > > Now, I want to kill the process tree starting from root. How
> > > > > can I achieve it?
> > > > >
> > > > > Limitation: the thing is that all the code is written using
> > > > > plain spawn and no consideration was done in the code for
> > > > > this kind of case(such as link). Moreover, you can't change
> > > > > the code. The code for root and so on were written without
> > > > > any regard for this process tree kill. (well, suppose the
> > > > > root and its descendant codes were written by a third-party)
> > > > >
> > > > > How can I do it?
> > > > >
> > > > > June
> > > > > _______________________________________________
> > > > > erlang-questions mailing list
> > > > > 
> > > > > http://www.erlang.org/mailman/listinfo/erlang-questions
> > > > >
> > > >
> > >
> >
>



More information about the erlang-questions mailing list