Por que o comando atual resulta na saída do comando anterior?

0

No meu .bashrc

alias ss="sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1' & "

Execute ss na primeira vez.

debian9@hwy:~/workspace$ ss
[1] 9710

Execute ss na segunda vez

debian9@hwy:~/workspace$ ss
[2] 9728
[1]   Exit 1                  sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1'

O segundo comando resulta na saída do primeiro comando.
Por quê?
Agora execute o comando cd

debian9@hwy:~/workspace$ cd
[2]+  Exit 1                  sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1'  (wd: ~/workspace)
(wd now: ~)

Por que cd resulta na saída de ss ?

    
por it_is_a_literature 22.01.2018 / 04:46

1 resposta

4

Essa é apenas a impressão que você obtém porque seu shell apenas exibe informações sobre trabalhos concluídos quando ele exibe um prompt; citando por exemplo a bash manpage :

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.

Então, o que está acontecendo é

  1. Você inicia ss , que é executado em segundo plano.
  2. O shell gera o próximo prompt.
  3. O trabalho em segundo plano é concluído, mas o shell ainda não produz nada.
  4. Você executa seu próximo comando (qualquer coisa, ss , cd etc.).
  5. O shell exibe o próximo prompt e, como está fazendo isso, exibe as informações de saída dos trabalhos concluídos ...

Você pode ver o que realmente está acontecendo executando set -b para que o shell não espere por um aviso antes de exibir o status de saída de um trabalho concluído.

    
por 22.01.2018 / 06:38

Tags