To interrupt the kernel, SIGINT needs to be sent to the appropriate process. This process is not the "jupyter console" process itself, but rather a child process of it ("python -m ipykernel_launcher ..."). The old code was sending SIGINT to the wrong process.
As the process to signal is not a direct subprocess of emacs, I had to resort to unix tools to interrupt it, so this won't work on windows. An alternative approach might be to start the kernel with ipython kernel instead of jupyter console, then it would be a direct subprocess of emacs and we could interrupt it with (interrupt-process) as before.
This fixes https://github.com/gregsexton/ob-ipython/issues/115 (broken
ob-ipython-interrupt-kernel
) on linux and (probably) mac.To interrupt the kernel, SIGINT needs to be sent to the appropriate process. This process is not the "jupyter console" process itself, but rather a child process of it ("python -m ipykernel_launcher ..."). The old code was sending SIGINT to the wrong process.
As the process to signal is not a direct subprocess of emacs, I had to resort to unix tools to interrupt it, so this won't work on windows. An alternative approach might be to start the kernel with
ipython kernel
instead ofjupyter console
, then it would be a direct subprocess of emacs and we could interrupt it with(interrupt-process)
as before.Note it currently appears impossible to interrupt remote kernel, as noted in https://github.com/jupyter/jupyter_console/issues/150