A notificação de conclusão de uma tarefa em segundo plano é baseada em alguma manipulação de eventos de retorno de chamada?

0

Quando um trabalho em segundo plano no bash for concluído, ele notificará o terminal.

$ sleep 3 &
[1] 17527
$ 
[1]+  Done                    sleep 3
  • A notificação é baseada em alguma manipulação de eventos de retorno de chamada?

  • o trabalho em segundo plano notifica o terminal quando ele é concluído, enviando algum sinal para o terminal?

  • Por que preciso acertar um retorno (ou seja, executar um comando vazio) para ver a notificação no terminal?

por Tim 18.10.2017 / 15:09

1 resposta

1

Na página de manual :

The shell learns immediately whenever a job changes state. Normally, bash waits until it is about to print a prompt before reporting changes in a job's status so as to not interrupt any other output. If the -b option to the set builtin command is enabled, bash reports such changes immediately. Any trap on SIGCHLD is executed for each child that exits.

Isso explica por que você precisa pressionar Enter antes de ver a notificação. Você pode alterar isso executando set -b . Não tem muito a ver com o terminal , o controle de tarefas é gerenciado pelo shell. Quando um processo em segundo plano termina, o pai recebe um SIGCHLD signal ; essa é a notificação.

    
por 18.10.2017 / 15:18