如何在不终止父进程的情况下中断失控的ipython计算?
有时候,正在运行的 ipython
评估可能对你按下的一个或多个 Ctrl-C
没有反应1。
有没有其他方法可以强制 ipython
进程中止当前的评估,回到“读取”状态呢?
比如用 kill -SOMESECRETSIGNAL <pid>
命令?我试过一些信号(比如 SIGINT
、SIGTERM
、SIGUSR1
等等),但都没用:要么没有效果(比如 SIGINT
),要么直接杀掉了 ipython
进程。或者可能有什么复杂的 ipython
配置?或者某个特定的文件?……?
1这里的“及时”是指足够快。当然,具体多快算“及时”是无法准确说明的;这取决于情况、延迟的可靠性、用户的脾气、Hacker News 上的新闻等等。
1 个回答
1
这要看你打断程序执行的地方,比如是在你写的Python函数里,还是在某个底层库里。如果你经常在自己写的函数里打断程序,可以试着在这个函数里加一个try/except块,来捕捉KeyboardInterrupt
这个异常。这样做可能无法让你从底层库中退出(如果你确实是在那儿运行的话),但应该能防止ipython解释器直接退出。