Executando um processo em segundo plano

Executando um processo em segundo plano

Tenho 2 perguntas sobre como iniciar os processos em segundo plano:

  1. Por que iniciar um processo em segundo plano é assim:

    ./my_program &

    ( my_programter 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.

  2. 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

  1. 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).

  2. 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_commandagora 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_commandfoi concluído.

    Para descobrir quais trabalhos em segundo plano o bash está rastreando atualmente, você pode usar o jobsintegrado 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, tentehelp jobs

informação relacionada