É possível fazer uma chamada exec que “retorna”?

5

Existe uma maneira de fazer a chamada do sistema exec funcionar como uma chamada de função que retorna ao invés de substituir totalmente a imagem do processo atual? Minha motivação é tentar integrar dois shells com linguagens incompatíveis. A idéia é que o shell A seria capaz de executar scripts escritos na linguagem B do shell e ainda manter quaisquer alterações nas variáveis de ambiente, diretório de trabalho, etc. que o script shell B faz.

Até agora, todas as soluções que pude pensar têm algumas grandes limitações.

A primeira solução é ter o shell A no shell B e então ter o shell B exec de volta no shell A, como eu faço em essa pergunta que eu fiz antes . O problema é que isso elimina qualquer estado do shell inicial Um processo, como a posição no script atualmente em execução, variáveis locais, aliases, etc.

A segunda solução é ter o shell A executando o shell B como um subprocesso tradicional usando fork-exec e fazendo com que o shell B serialize seu ambiente antes de sair e enviá-lo de volta para o shell Um processo. Duas vantagens disso são que ela preserva o estado do processo pai e que também podemos serializar dados no nível do aplicativo, como funções e aliases, se quisermos. O problema é que há um grande número de coisas que um subprocesso herda do pai e de sua É difícil ter certeza de que não esquecemos de serializar um desses.

    
por hugomg 19.05.2015 / 22:35

0 respostas