Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找出在I CTRL+;C语言编写python程序_Python_Multithreading_Multiprocessing_Pdb - Fatal编程技术网

找出在I CTRL+;C语言编写python程序

找出在I CTRL+;C语言编写python程序,python,multithreading,multiprocessing,pdb,Python,Multithreading,Multiprocessing,Pdb,在我按住CTRL+C键终止python程序后,我发现大多数线程和进程都已终止(它们正在监视一些标志),但仍有一些线程和进程在后台运行,没有任何控制台输出。我有没有办法调查哪一个还在运行 如果您建议在线程/进程运行时打印某些内容,它似乎不起作用。首先,一些线程/进程正在第三方库中运行方法,例如websocket.run\u。第二,对于那些运行我的方法的线程/处理,我非常确定它们正在监视一个标志,一旦设置好,它们都会退出。对于那些运行第三方方法的线程/进程,我调用了一些方法来终止它们,比如webso

在我按住CTRL+C键终止python程序后,我发现大多数线程和进程都已终止(它们正在监视一些标志),但仍有一些线程和进程在后台运行,没有任何控制台输出。我有没有办法调查哪一个还在运行


如果您建议在线程/进程运行时打印某些内容,它似乎不起作用。首先,一些线程/进程正在第三方库中运行方法,例如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
。最后,杀死一个进程也会终止它的所有线程,因此您不必担心线程会挂起,而只需处理进程。