O que acontece sob o capô quando executo um programa de linha de comando em outra linguagem de programação?

2

Algumas linguagens de programação possuem chamadas system () exec () onde posso executar comandos. O que exatamente acontece quando eu faço isso? Se eu executar o sistema ("ls") Ele executa um intérprete bash na string? Faz uma chamada ao sistema operacional? O que acontece quando é um programa como o top que modifica a tela do terminal ao invés de descarregar constantemente?

Não sei bem como perguntar. Onde posso aprender mais sobre como funciona?

    
por BreezyChick89 23.05.2012 / 23:25

2 respostas

4

Esta página descreve muito bem

link

If command is a null pointer, the system() function shall determine whether the host environment has a command processor. If command is not a null pointer, the system() function shall pass the string pointed to by command to that command processor to be executed in an implementation-defined manner; this might then cause the program calling system() to behave in a non-conforming manner or to terminate.

Então, sim, ele invoca um intérprete bash, desde que este seja o processador de comando determinado pela implementação da biblioteca padrão C nesse sistema. Um processo filho é criado e destruído quando o comando é executado.

EDIT: Isto é específico para C, outras linguagens podem funcionar de forma diferente, mas geralmente é assim

    
por 23.05.2012 / 23:36
0

Essas chamadas de função podem ser implementadas de maneira diferente, dependendo do idioma que você está usando. No entanto, em geral, o que eles farão é criar um novo processo executando um shell e depois executar o comando nele. Depois que o processo for concluído, ele será encerrado e seu programa receberá o que quer que seja que a linguagem define o valor de retorno (geralmente é um código de retorno ou a saída padrão do programa que foi executado).

Como ele cria um novo processo para executar o comando, seu comportamento não afetará o ambiente de tempo de execução de seu próprio programa.

    
por 23.05.2012 / 23:38