a mensagem “concluído” depois que um comando & não for exibido imediatamente, mas após uma ação do usuário. Por quê?

1

Eu faço um sleep 3 & e a mensagem "concluído" é exibida como parte do comando ps , e não diretamente no console. Não precisa ser ps . Qualquer comando após o sleep ser feito terá uma linha extra no final com a mensagem "concluído". Por que isso?

OS são centos-7.0, baixados com o vagrant.

[vagrant@localhost ~]$ sleep 3 &
[1] 2838
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
 1871 pts/0    00:00:00 bash
 2838 pts/0    00:00:00 sleep
 2840 pts/0    00:00:00 ps
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
 1871 pts/0    00:00:00 bash
 2841 pts/0    00:00:00 ps
[1]+  Done                    sleep 3
[vagrant@localhost ~]$

Se eu fizer ls > ls.txt , a mensagem "concluído" não irá para o arquivo. Ele é exibido no console. Se eu clicar em entrar após 3 segundos, a mensagem será exibida. Está em algum tipo de cache? O que acontece?

    
por mist 27.12.2014 / 19:56

2 respostas

2

A mensagem " Concluído " não é gerenciada pelo processo que você executou, mas por bash para notificá-lo sobre o final de um trabalho em segundo plano. É por isso que fornece a mensagem quando há alguma atividade no console.

Em bash , você pode usar:

  • set +m ( monitor ) para remover esse tipo de mensagem se você não quero vê-los.
  • set -b ( notify ) para exibir as mensagens sem qualquer atraso.
por 27.12.2014 / 21:30
3

man bash diz:

   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.
    
por 27.12.2014 / 21:35

Tags