Если вы пишете программу, лучший способ сделать это - захватить сигналы от операционной системы и указать в программе, как вы хотите, чтобы программа их обрабатывала. Затем вы можете использовать команду kill (к сожалению, IMO), чтобы отправить соответствующий сигнал программе, чтобы он остановился так, как вы хотите. (К сожалению, я никогда не делал этого с Python, но похоже, что вы можете использовать os.kill для отправки сигнала.) Конечно, вы могли бы сделать то же самое, если бы это была не написанная вами программа, но вы знаете (или узнаете, возможно, методом проб и ошибок), что она обрабатывает определенный сигнал желаемым способом.
У меня нет Ubuntu, но вы можете получить список доступных сигналов, набрав man signal в командной строке.