bmake not killing childrens
Matthew Dillon
dillon at apollo.backplane.com
Wed Oct 4 09:37:41 PDT 2006
:Hi,
:some of you may have noticed that sometimes when you type Ctrl + C
:to stop bmake it doesn't stop. I find that behaviour annoying so
:i created this patch[1] to solve it.
:
:This patch disables make compatibility mode, so some things WILL
:break. bmake unit tests is an example of this. So to install the new
:bmake you'll need to cp /usr/pkgsrc/devel/bmake/work/DragonFly/bmake
:to /usr/pkg/bin/bmake
:
:I've tried it compiling mule-ucs package and seems that bmake with
:the patch did his job fine, but it may break things, so use with
:caution.
:
:Also it would be great if someone who knows bmake internals could
:find a better and definitive solution.
:
:[1]: http://bsdes.net/~victor/dfbsd/bmake/main.c.patch
Our normal 'make' sometimes fails to kill children too. Now it is
certainly possible for a program to ignore SIGINT, but the real
problem here is probably due to a bug in DragonFly rather than a bug
in make or bmake.
When you send a ^C, the signal gets sent to the entire process group.
But there is a race in DragonFly's fork() code (fork1() in the kernel)
where the newly forked child process does not receive the signal because
it is still in the middle of being set-up. It is either not yet in the
process group or the process is flagged as not being completely set-up
yet and the signal is ignored.
I think if this bug is addressed, most (or all) of these issues will
go away.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Users
mailing list