当前位置: 首页 > 知识库问答 >
问题:

不能用Ctrl-C杀死Python脚本

归松
2023-03-14
import threading

class FirstThread (threading.Thread):
    def run (self):
        while True:
            print 'first'

class SecondThread (threading.Thread):
    def run (self):
        while True:
            print 'second'

FirstThread().start()
SecondThread().start()
import signal 
import sys
def signal_handler(signal, frame):
    sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)

要杀死进程,我使用Ctrl+z将程序发送到后台后,通过PID杀死它,这是不会被忽略的。为什么Ctrl+C总是被忽略?我如何解决这个问题?

共有1个答案

郝冥夜
2023-03-14

Ctrl+C终止主线程,但由于线程不处于守护进程模式,它们将继续运行,从而使进程保持活动状态。我们可以让它们成为守护进程:

f = FirstThread()
f.daemon = True
f.start()
s = SecondThread()
s.daemon = True
s.start()

但是还有另一个问题--一旦主线程启动了线程,它就没有其他事情可做了。因此它退出,线程立即被销毁。所以让我们保持主线的活力:

import time
while True:
    time.sleep(1)

现在,它将保持打印“第一”和“第二”,直到您点击Ctrl+C

 类似资料:
  • 我使用Spring Boot Gradle插件启动Tomcat服务器&我的应用程序。我通过启动Tomcat服务器。我还启用了Gradle守护进程,希望能让Gradle构建更快。

  • 问题内容: 我需要制作一个从用户获取以下内容的脚本: 1)进程名称(在Linux上)。 2)此进程写入的日志文件名。 它需要终止该进程并确认该进程已关闭。将日志文件名更改为带有时间和日期的新文件名。然后再次运行该过程,确认它已启动,以便继续写入日志文件。 先谢谢您的帮助。 问题答案: 您可以使用以下命令检索给定名称的进程ID(PID): 希望这可以帮助

  • 问题内容: 我正在使用以下脚本测试Python线程: 它在Kubuntu 11.10上的Python 2.7中运行。+ 不会杀死它。我还尝试为系统信号添加处理程序,但这没有帮助: 为了杀死该进程,我将程序发送到+ 后,通过PID将其杀死,这不会被忽略。为什么+ 被如此持久地忽略?我该如何解决? 问题答案: + 终止主线程,但是因为您的线程不在守护程序模式下,所以它们继续运行,并且使进程保持活动状态

  • [注意:这与如何从Java程序启动完全独立的进程有关?但不同] 我希望能够从一个“管理器”Java进程中派生出外部进程(shell脚本),当JVM被杀死时,该进程应该继续运行——但当我杀死父Java程序时,子Java程序似乎也被杀死(注意,如果JVM自然退出,行为会有所不同)。我拥有的最简单的测试程序是: 和外部脚本: 作为 java-带有依赖项的类路径jar。罐子温度。执行官。快跑快跑。嘘 如果

  • 问题内容: 我有一个使用线程并发出大量HTTP请求的python脚本。我认为正在发生的事情是,正在读取HTTP请求(使用urllib2)时,它正在阻塞并且没有响应以停止程序。有没有办法解决? 问题答案: 在Windows上,唯一确定的方法是使用。立即停止每个python脚本! (请注意,在某些键盘上,“中断”被标记为“暂停”。)

  • 问题内容: 我从python脚本生成了5个不同的进程,如下所示: 我的问题是,当父进程(主脚本)以某种方式被杀死时,子进程继续运行。 当父进程被杀死时,有没有办法杀死这样生成的子进程? 编辑:我正在尝试: 但这似乎不起作用 问题答案: 我自己也遇到了同样的问题,我有以下解决方案: 打电话之前,您可以设置。然后如此处所述python.org multiprocessing 进程退出时,它将尝试终止其