Kill deno process tree
How would you kill a Deno process tree as in, force kill of Deno process and any of it's subprocesses?
Deno.kill
appears to possibly leave subprocesses alive.
Ideally using Deno.ChildProcess
API, but I highly suspect it's not possible using the runtime API; I would also be happy with just a linux command I could run along with the PID!
(I'm not that well versed with linux commands and process stuffs, so far I've been using killall deno
which definitely works but would be nice to target only a specific process tree)2 Replies
I wasn't able to find the answer to your question in the official Deno documentation. However, based on your message, I can provide some general advice that might help you with your issue.
To kill a Deno process tree, including all of its subprocesses, you would typically need to send a signal to the parent process that also affects all its children. On Linux, you can use the
pkill
command with the -P
flag to target a specific parent PID and its child processes.
For example, if you have the PID of the Deno process, you could use:
Replace <parent-pid>
with the PID of the Deno process you want to kill. This should terminate the process and all of its subprocesses.
Please note that this advice is not based on the Deno documentation, and I would advise you to double-check the accuracy of this command and its suitability for your use case. It's also important to use such commands with caution, as they can terminate processes abruptly.
For a more Deno-specific solution, you might need to manage the subprocesses manually, keeping track of their PIDs and sending kill signals as necessary, but this would be more complex and is not directly supported by the Deno.ChildProcess
API as of my knowledge cutoff date.good bot
pkill -P <parent-pid>
does not seem to recursively kill the whole process tree, only killing descendants but not descendants-of-descendants 🤔
Curiously it does seem like there is no "kill whole tree by pid" command built into linux - all the stack overflow answers seem to suggest a recursive bash script to accomplish that. So here's what I came up with to avoid introducing a bash script to my codebase, keeping it in Deno. It's an unfortunately named function, and a hodgepodge of JS
, pgrep
and Deno.kill
to recursively kill a whole subprocess tree. Quick testing seem to indicate it works. (I'm using my own wrapper lib for Deno.Command, hence the weird API, but you'll get the idea)