tl; dr; o processo Xvfb define um manipulador de sinal para SIGINT e sai quando recebe tal sinal, mas o processo sleep não, então ele herda o "ignore" o estado para SIGINT como foi definido pelo shell executando o script antes de executar o sleep binário.
Quando um script de shell é executado, o controle de trabalho é desativado e os processos em segundo plano (aqueles iniciados com & ) são executados no mesmo grupo de processos, com SIGINT e SIGQUIT definido como SIG_IGN (ignorado) e com seu stdin redirecionado de /dev/null .
Isso é exigido pelo padrão :
If job control is disabled (see the description of set -m) when the shell executes an asynchronous list, the commands in the list shall inherit from the shell a signal action of ignored (SIG_IGN) for the SIGINT and SIGQUIT signals.
Se a disposição do sinal estiver definida como SIG_IGN (ignorar), esse estado será herdado por meio de fork() e execve() :
Signals set to the default action (SIG_DFL) in the calling process image shall be set to the default action in the new process image. Except for SIGCHLD, signals set to be ignored (SIG_IGN) by the calling process image shall be set to be ignored by the new process image.