O que você observa é uma combinação de duas coisas:
-
Ctrl-C envia INT para o grupo de processos, o que significa que não apenas o processo de longa duração, mas também o processo zsh em que está sendo executado, será finalizado simultaneamente (e não terá a chance de se reiniciar).
-
xfce4-terminal, não fechará a guia depois que o processo terminar, devido ao sinalizador -H:
−H, −−hold Causes the terminal to be kept around after the child command has terminated
que faz parecer que está pendurado
Um caso de teste mais simples para isso pode ser algo assim:
CMD=xeyes
START=$'/usr/bin/zsh -c \''$CMD$'; /usr/bin/zsh\''
xfce4-terminal --tab -H -T mycommand --working-directory=$HOME -e "$START"
Se você iniciar isto, os "xeyes" estarão seguindo você, até que você pressione Ctrl + C , ponto em que eles serão fechados e seu terminal parecerá estar travado.
Mas se, em vez de clicar em Ctrl + C , você matar os próprios xeyes (ou seja, com um xkill ou uma barra de tarefas do gerenciador de janelas), uma sessão zsh comece como pretendido.
Uma solução para isso, é interceptar o SIGINT e reiniciar o shell, assim:
CMD=xeyes
START=$'/usr/bin/zsh -c \'trap "exec /usr/bin/zsh" INT;'$CMD$'; exec /usr/bin/zsh\''
xfce4-terminal --tab -H -T mycommand --working-directory=$HOME -e "$START"
Note que você também pode querer remover '-H', para fechar a aba, quando você sair do shell.