我正在编写一个 Python 程序,当我中断该程序时,不幸的是,它会在打印新的美元行之后打印行。它看起来像这样:
[INFO]: Program finishing...
user@machine:~/program$ [INFO]: Almost finished.
[INFO]: Program finished.
[]
我希望这个新的命令行在程序的所有输出之后生成,这样当用户想要再次输入某些内容时,它就不会出现在奇怪的位置。现在我不确定是什么原因导致出现新的命令行(sys.exit() 会这样做吗?),因为我可能可以将其移动到程序的末尾,即出现最后一条打印语句的地方。
谢谢你!
答案1
听起来您的程序由多个进程组成。从命令行运行的初始进程会生成一些子进程(可能是为了处理不同的任务,或者利用多个 CPU 核心)。但是,在退出时,初始进程只会向其所有子进程发出退出信号,而不会等待,它只是先退出。
您的 shell 并不知道发生了什么。它只等待初始进程,而不是整个进程组。因此,只要初始进程退出,shell 提示符就会出现,即使后台还有更多进程在运行。
例如:
me@example$ (sleep 5; echo Hello) &
[1] 12345
me@example$ Hello!_
理想情况下你的程序应始终跟踪其所有子进程,并等待它们退出后再退出。如何做到这一点取决于子进程的创建方式(例如,您是否使用了 os.fork() 或多处理模块或其他东西)。