Por que alguns programas retornam ao serem chamados do terminal enquanto outros apenas retornam apenas com a inclusão de um '&'

5

Programas como o Skype e o Tixati podem ser chamados pelo terminal sem adicionar & no final da chamada. Por que esse não é o caso do Firefox? Estou apenas curioso para saber quais programas eu preciso adicionar a opção & .

    
por Sharan Duggirala 14.06.2015 / 12:22

3 respostas

13

Isso depende inteiramente de como o software foi escrito, muitas vezes também dependendo da intenção com ele.

A maioria dos utilitários bash (= shell, terminal) devem ser usados "sincronicamente", com os quais a execução é destinada a produzir um resultado; que pode ser necessário para os seguintes comandos em um script ou procedimento manual - se o utilitário (programa, software) se desconectar e deixar você no prompt imediatamente, você não saberá quando ou se o resultado está disponível.

O Skype não é normalmente usado como "utilitário" de linha de comando, mas sim como uma ferramenta para lidar com comunicação (telefone ou qualquer outra coisa). E então é muito útil se ele não bloquear o terminal, se for lançado a partir daí.

Desanexando do terminal:
link

    
por Hannu 14.06.2015 / 12:30
9

Todos os programas podem ser chamados sem & . O & é completamente opcional. Tudo o que faz é enviar o processo para o segundo plano para que você possa continuar usando seu terminal.

Sem ele, se você iniciar um processo a partir do terminal, precisará aguardar até que o processo seja concluído (ou esteja fechado) antes de poder continuar usando seu terminal. Portanto, geralmente são executados programas como command & para enviá-los para o segundo plano e continuar trabalhando no mesmo terminal.

Para saber mais sobre os vários operadores de shell, como & e o que eles fazem, consulte aqui .

    
por terdon 14.06.2015 / 12:34
3

É muito simples para um programa se colocar em segundo plano. O código usado para fazer isso pode ser tão simples assim:

if (fork() > 0) _exit(0);

Mas fazer isso por padrão introduziria algumas desvantagens. Por exemplo, você não pode mais envolver o programa em um script que faz algo no final do programa. E gravar a saída para o terminal a partir de um processo em segundo plano pode acabar parecendo bastante confuso, a saída de terminal dos processos em segundo plano pode ser desabilitada, mas o processo em segundo plano será congelado quando ele tentar produzir saída.

Na minha experiência, o Skype e o Firefox não se colocam em segundo plano. Eles fazem algo diferente embora.

Quando você inicia um desses programas, eles verificam se já existe uma instância em execução do programa. Se houver uma instância em execução, a nova instância enviará uma mensagem para a instância em execução com o parâmetro que você acabou de fornecer e, em seguida, sairá.

O efeito disso é que a instância já em execução faz algo e você recebe o seu prompt de volta.

    
por kasperd 15.06.2015 / 08:37