我有一个脚本可以无限地运行两个线程。(每个线程都是无限的while循环)每当我正常运行它时,我都使用ctrl+z或ctrl+c来停止它的执行(取决于操作系统)。但自从我把它添加到Linux中的/etc/rc.local文件中,为了在引导时自动启动,我就无法使用这些命令强制退出。

这迫使我在Python脚本本身中包含一些内容,以便在键入某个键时完全退出。我该怎么做?

问题是我正在运行一个多线程应用程序,它连续运行,不等待任何用户输入。

我在线程的循环开始处添加了这个-

1
2
3ip = raw_input()
if ip == 'quit':
quit()

但这不起作用,因为它会阻止用户输入并停止脚本。我一点也不想让这个脚本受到影响。我只想让它在我想停止的时候做出反应。我的问题不是要使用什么命令(这里解释了这一点——python exit命令——为什么要使用这么多命令,每个命令应该在什么时候使用?)但我应该如何在不影响程序流的情况下使用它。

您处理KeyboardInterrupt的代码看起来如何?你在处理那个例外情况时有没有做任何清理?如果没有,发送一个sigterm就足以停止它。

我只需要关闭两个连接-每个线程一个。江户十一〔一〕号

保留处理KeyboardInterrupt的代码,并向其发送一个int信号以停止程序:kill -INT $pid从shell发出,其中$pid是程序的进程ID(PID)。这基本上与在shell中按ctrl+c相同,程序在前台运行。

在程序启动后立即将其PID写入一个文件中,无论是从程序本身还是从异步启动它的代码中,都可以使以后发送信号更容易,而无需在进程列表中搜索进程。

一种方法是让线程检查全局变量作为其循环的一部分,并在设置变量时终止(break,即终止)。

在终止之前,主线程可以简单地设置变量和join()所有现有线程。您应该知道,如果单个线程被阻塞,等待某个事件继续发生,从而检测到全局变量已设置,那么它们可能会一直挂起,直到该事件发生为止。