Tanto quanto eu sei, não há métodos shell para fazer o que você está tentando, isso terá que ser feito a partir de um programa personalizado.
Use ptrace() para monitorar o processo, da mesma forma que um depurador faz. Quando o processo receber um sinal, ele será interrompido e o programa de monitoramento será notificado (sua chamada para wait() retornará e WIFSTOPPED(status) será verdadeira).
Em seguida, ele pode executar lsof -p <pid> para listar os arquivos abertos do processo e, em seguida, chamar ptrace(PTRACE_CONT, pid, NULL, 0) para reiniciar o processo.