找出在I CTRL+;C语言编写python程序
在我按住CTRL+C键终止python程序后,我发现大多数线程和进程都已终止(它们正在监视一些标志),但仍有一些线程和进程在后台运行,没有任何控制台输出。我有没有办法调查哪一个还在运行找出在I CTRL+;C语言编写python程序,python,multithreading,multiprocessing,pdb,Python,Multithreading,Multiprocessing,Pdb,在我按住CTRL+C键终止python程序后,我发现大多数线程和进程都已终止(它们正在监视一些标志),但仍有一些线程和进程在后台运行,没有任何控制台输出。我有没有办法调查哪一个还在运行 如果您建议在线程/进程运行时打印某些内容,它似乎不起作用。首先,一些线程/进程正在第三方库中运行方法,例如websocket.run\u。第二,对于那些运行我的方法的线程/处理,我非常确定它们正在监视一个标志,一旦设置好,它们都会退出。对于那些运行第三方方法的线程/进程,我调用了一些方法来终止它们,比如webso
如果您建议在线程/进程运行时打印某些内容,它似乎不起作用。首先,一些线程/进程正在第三方库中运行方法,例如websocket.run\u。第二,对于那些运行我的方法的线程/处理,我非常确定它们正在监视一个标志,一旦设置好,它们都会退出。对于那些运行第三方方法的线程/进程,我调用了一些方法来终止它们,比如websocket.close(),我确实看到它们被终止了。所以在这种情况下,我很困惑什么还在运行 您可以调用这个奇妙的函数,它打印所有运行线程的当前回溯 如果您的主线程(或您控制的另一个线程)仍在该点运行(例如,等待其他线程在退出之前完成),请在该点添加函数调用 另一个选项是将
pdb
调试器附加到正在运行的进程,然后运行转储堆栈
这应该能让您很好地了解哪些线程仍在运行。您可以调用这个奇妙的函数,它打印所有正在运行的线程的当前回溯 如果您的主线程(或您控制的另一个线程)仍在该点运行(例如,等待其他线程在退出之前完成),请在该点添加函数调用 另一个选项是将
pdb
调试器附加到正在运行的进程,然后运行转储堆栈
这应该会让你很好地了解什么还在运行。以下是我最后做的。它没有直接回答问题,但它解决了我的问题 首先,在我按住CTRL+C键启动程序后,我执行
ps aux | grep -i "myProgram.py"
然后发现只有一个进程仍在运行(在I CTRL+C之前超过五个)
接下来,我将在程序“daemon”中创建的所有线程,尤其是在主进程中运行的线程
那么,我愿意
threads = threading.enumerate()
for _t in threads:
print _t.name
print _t.isAlive()
print _t.isDaemon()
以便在捕捉到键盘中断(从CTRL+C)并进行清理(设置线程/进程终止标志)后,找出仍在运行的任何内容
现在,在我按住CTRL+C键之后,程序就优雅地存在了,后台没有任何东西继续运行。下面是我最后做的。它没有直接回答问题,但它解决了我的问题 首先,在我按住CTRL+C键启动程序后,我执行
ps aux | grep -i "myProgram.py"
然后发现只有一个进程仍在运行(在I CTRL+C之前超过五个)
接下来,我将在程序“daemon”中创建的所有线程,尤其是在主进程中运行的线程
那么,我愿意
threads = threading.enumerate()
for _t in threads:
print _t.name
print _t.isAlive()
print _t.isDaemon()
以便在捕捉到键盘中断(从CTRL+C)并进行清理(设置线程/进程终止标志)后,找出仍在运行的任何内容
现在,程序在I CTRL+C后优雅地存在,后台没有任何东西继续运行。如果要让它们停止,只需重新启动操作系统上的任务管理器即可。Control-C的功能取决于shell和操作系统。它是否终止进程甚至取决于程序本身。这使得如果没有更多的信息,甚至是一个例子,就很难给出建议。无论如何,如何停止运行进程也取决于您的操作系统,但只需搜索web就可以轻松找到。如果您想让它们停止,只需重新启动操作系统上的任务管理器即可。Control-C的功能取决于shell和操作系统。它是否终止进程甚至取决于程序本身。这使得如果没有更多的信息,甚至是一个例子,就很难给出建议。无论如何,如何停止运行进程也取决于您的操作系统,但在Linux上只需搜索web就可以找到。安装
htop
。也就是说,读一下manpgrep
,mankillall
。最后,杀死一个进程也会终止它的所有线程,所以你不必担心线程的问题,只需处理进程即可。在Linux上安装htop
。也就是说,读一下manpgrep
,mankillall
。最后,杀死一个进程也会终止它的所有线程,因此您不必担心线程会挂起,而只需处理进程。