Como controlar processos em caso de falha?

Sei que o título ficou confuso, mas vou tentar dar um panorama do que quero fazer. De antemão, adianto que venho primeiro em busca de IDEIAS para meu problema!

Bem, eu estou tentando fazer um servidor em Python que utiliza Linux e FFMPEG pra fazer um certo tipo de gravação. Eu recebo os parâmetros via MQTT junto com a ordem de “start” das gravações, e o Python executa a gravação dessa forma:

async def command(*args):
    process = await asyncio.create_subprocess_exec(*args, stdout=asyncio.subprocess.PIPE)
    stdout, stderr = await process.communicate()
    return stdout.decode() if process.returncode == 0 else stderr.decode()

def gravacao():
#código omitido
    loop = asyncio.get_event_loop()
    processes = asyncio.gather(*commands)
    loop.run_until_complete(processes)
    loop.close()

A minha dúvida é:

Imagine que, por algum motivo, meu script pare de rodar no servidor do cara. Automaticamente eu perco minhas conexões e tudo mais (tenho ciencia disso), mas como fazer com que o FFMPEG para de gravar (para ele não ficar infinitamente) depois que eu iniciar novamente meu script?

Quero dizer, imagine que ele receba a notificação e comece a gravar. Por algum motivo, o script caiu e dez segundos depois “reiniciou”. Nesse tempo, o FFMPEG está gravando e vai ficar até ser fechado manualmente (e isso é inviavel!).

Espero que tenha ficado claro, quero fazer o possível pra ajudar a me ajudarem!

Abraço a todos!

Há algumas maneiras de fazer isso, mas há duas a se destacar e que eu julgaria mais apropriadas para você, acredito que seu código está rodando dentro de um loop principal (main loop), certo?! pois bem, vamos ao que interessa.

1° Parte) Como fechar o FFMPEG?
Você pode fazer isso usando o modulo os e seu método system().

import os
os.system("ls")  #Exemplo - Método .system() executa comandos do sistema operacional.

#Função a ser executada ao sair.
def run_on_exit():
    os.system("sudo service ffmpeg stop")

2° Parte - Hora do Show PARTE_1 - SOLUÇÃO 1
Pois bem, quando você instanciar seu objeto, chame todos os seus métodos e funções dentro de uma cláusula try: except e sua função fechar FFMPEG no finally, observe o esquema abaixo:

try:
    #Aqui você instância seu objeto.
except Exception:
    print("Menssagem de error!") #Seria legal gravar os erros em um arquivo error-log
finally:
    run_on_exit() #Fechando FFMPEG ao sair.

3° Parte - Hora do Show PARTE_2 - SOLUÇÃO 2
Outra maneira de fazer isso é usando o módulo atexit, o uso do mesmo é simples, no seu caso, basta adicionar as linhas abaixo no seu código e done (feito).

import atexit
atexit.register(run_on_exit)

Abraço!

Caro @Tuna, o tópico que tu respondeu é de um usuário excluído!

Mesmo assim, muito obrigado pelo conhecimento compartilhado.

Vacilo kkk
Obrigado @Jonathan_Medeiros!