Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I wrote a 'subreaper' program to capture and kill such things some time ago. It's pretty basic, having options to pass on signals, start killing subprocesses if it receives a signal, or killing subprocesses after the initial subprocess dies. There is an undocumented --all that prints logs, kills on stats and doesn't start killing when the main program dies. I use it for killing test subprocesses or capturing things to terminals that would otherwise double-fork out of them, allowing me to kill them and all their subprocesses with a ctrl-c.

https://github.com/knome/pj

>Linux is in the middle of adding new APIs like pidfd_send_signal, but none of them are aimed at improving the situation with grandchildren.

While my subreaper is vulnerable to pid reuse, but I think it could be fixed by having it do this:

    loop
        children = scan-for-children
        for each child
            if no pidfd for given child
                pidfd open child ( dropping if error )
        still-children = scan-for-children
        close-and-drop any pidfd's that are no longer children
        safely-kill-children-via-pidfds
If you kill the direct children, the grandchildren will become direct children since you are a subreaper, and then so on.

In summary, a helper process using subreaper+pidfd should be able to properly and safely contain and kill grandchild processes.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: