
Tenho 2 perguntas sobre como iniciar os processos em segundo plano:
Por que iniciar um processo em segundo plano é assim:
./my_program &
(
my_program
ter permissão exe definida, é claro) não faz com que o bash imprima o prompt de comando como qualquer outro comando? Apenas deixou uma nova linha vazia com o cursor piscando.Quando executo os próximos novos processos em segundo plano, o bash exibe algo. assim:
./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program
isso significa que iniciar outros processos extras em segundo plano faz com que o sistema exiba informações sobre os processos de visualização (
[27], [28], [29]
linhas) desde que o atualmente iniciado) ([30]
linha)?
Responder1
Isso não deveria acontecer. Quando você executa um comando no bash em segundo plano, geralmente apenas imprime o número do trabalho e o pid (veja abaixo) e depois volta para um prompt de comando.
A única razão pela qual sei que isso leva o bash a deixar você com uma nova linha nesta situação é se o seu comando realmente não existe, pois de alguma forma ele fornecerá a mensagem de erro após a impressão do PS1:
$ nonexistant_command & [1] 13856 $ nonexistant_command: command not found <empty line with blinking cursor here>
Seja qual for a causa, pressionar enter enquanto estiver nesta linha vazia deve imprimir uma nova linha com seu prompt habitual (e, possivelmente, a mensagem de que o trabalho que você acabou de gerar foi concluído; veja abaixo).
A saída adicional que você vê é o bash informando sobre os trabalhos em segundo plano atuais:
Primeiro, ele informa o número do trabalho atual de qualquer processo em segundo plano recém-criado junto com seu pid, assim:
$ some_command & [1] 1234
Isso significa que o comando
some_command
agora está sendo executado com o pid 1234 como tarefa 1.Assim que um trabalho em segundo plano terminar, o bash irá notificá-lo sobre isso na próxima vez que imprimir um prompt de comando (seja porque você gerou outro processo em segundo plano, executou um comando em primeiro plano ou simplesmente pressionou enter com uma linha de comando vazia) imprimindo um mensagem como esta:
[1] Done some_command
Isso significa que o trabalho com o número 1 executado
some_command
foi concluído.Para descobrir quais trabalhos em segundo plano o bash está rastreando atualmente, você pode usar o
jobs
integrado da seguinte forma:$ jobs [1] Running some_command & [2] Running some_other_command &
Para trazer um trabalho para o primeiro plano, você pode usar
fg
:$ fg 2 some_other_command
Para obter mais informações sobre isso, tente
help jobs