Lista de processos como um processo em segundo plano

1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)
1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)&
[1] 3297
abhigenie92@ubuntu:~$ 1

[1]+  Done                    ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )

O que acontece quando o lançamos como um processo em segundo plano, por que eu não recebo o prompt de volta e preciso pressionar Enter ? Em ambos os casos, ele lança um shell filho.

    
por Abhishek Bhatia 07.03.2016 / 19:35

1 resposta

2

Você recebeu o prompt de volta (veja a quinta linha do seu bloco de código) - e então você obteve a saída. Você ainda estava "no prompt do shell" quando você digitou Enter pela terceira vez.

Em teoria, o shell pode ser programado para reemitir o prompt quando um processo em segundo plano termina. Mas

  1. Isso não seria muito útil. Seu problema é que quando o trabalho em segundo plano fez o echo 1 e o 1 aparecerem no seu terminal, seu cursor voltou para a borda esquerda da tela, e tornou-se óbvio que você ainda estava "no prompt do shell". E o escudo de primeiro plano não sabe quando uma tarefa em segundo plano é gravada na tela.
  2. Historicamente, o shell não sabe quando você está digitando um comando; ele só sabe quando você digita Enter . (Isso ainda pode ser o caso em alguns contextos.) Então a casca não saberia se você estivesse no meio de digitar um terceiro comando

    (sleep 3; echo someth
    

    e seria muito confuso se você obtivesse um novo prompt de shell quando você estava no meio de digitar um comando.

por 07.03.2016 / 23:22