В общем, довольно сложно надежно уничтожить подпроцесс, потому что подпроцесс может выполнять бесперебойный код, когда вы хотите уничтожить его.Это, как говорится, похоже, что подход "изо всех сил" может быть подходящим для вашего случая.Вы захотите создать и ждать своего подпроцесса таким образом, чтобы можно было выполнить очистку, если процесс будет прерван.Самый простой способ сделать это - поместить ваш подпроцесс в блок try / finally.
try:
print("starting subprocess")
x = subprocess.Popen(["sleep", "100000"])
x.wait()
finally:
print("stopping subprocess")
x.terminate()
Я полагаю, что искра посылает сигнал прерывания