<div dir="ltr"><a href="https://downloads.haskell.org/~ghc/latest/docs/html/libraries/unix-2.7.2.2/System-Posix-Process.html#v:getGroupProcessStatus">https://downloads.haskell.org/~ghc/latest/docs/html/libraries/unix-2.7.2.2/System-Posix-Process.html#v:getGroupProcessStatus</a> (at a lower level, this is waitpid() with a negative process ID, expressing the process group whose leader has abs(process ID)).<div><br></div><div>And yes, if a process puts itself into its own process group, it will be immune to control in this fashion. You can do a bit more with sessions instead of pgroups, but then a process could put itself into its own session. cgroups are pretty much the only way to avoid this… if and only if you prevent processes in a given cgroup from creating new cgroups. It's something of an infinite regression.</div><div><br></div><div>As for cleanup, the convention is you use signal 15 (SIGTERM) to indicate "clean up and exit". If after a reasonable amount of time (typically some number of seconds) something is still running, you repeat with signal 9 (SIGKILL, which can't be blocked or masked). SIGTERM is usually sent to the entire process group, as individual processes may have their own distinct cleanup needs.</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018 at 3:26 PM David Feuer <<a href="mailto:david.feuer@gmail.com">david.feuer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">If the process is not thought to be hostile, I imagine it's best to first try signaling only the parent, and only signal the group if necessary. Otherwise, you may prevent it from cleaning up after itself properly. Dunno how to wait for the group to die.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018, 3:21 PM Bardur Arantsson <<a href="mailto:spam@scientician.net" target="_blank">spam@scientician.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2018-07-24 15:42, Johannes Waldmann wrote:<br>
> Dear Cafe,<br>
> <br>
> I am using<br>
> <a href="https://hackage.haskell.org/package/process-1.6.4.0/docs/System-Process.html#v:readProcess" rel="noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/process-1.6.4.0/docs/System-Process.html#v:readProcess</a><br>
> to start an external command, and wait for its completion.<br>
> <br>
<br>
If the process is hostile (e.g. fork bomb + countermeasures), then the<br>
*only* realiable way to do this is to use cgroups.<br>
<br>
Obviously, this applies to Linux only. I'm not sure there's actually any<br>
truly POSIX way to reliably kill hostile sub-processes. I don't think<br>
so. (The progress group thing doesn't work if the process is hostile.<br>
It'll work fine otherwise.)<br>
<br>
Regards,<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>