setpgrp provoca tty ido

1

Quando usar setpgrp vi (e outros programas tty) funcionar completamente diferente do que se setpgrp não for usado. Exemplo:

perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(exec qw(bash -c),qq(vi foo))); wait'

Isso funciona muito bem e chama vi foo . Mas adicione setpgrp :

perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(setpgrp;exec qw(bash -c),qq(vi foo))); wait'

e depois não funciona tão bem.

Testado no GNU / Linux (Mint), no FreeBSD, no OpenBSD, no Solaris, no HPUX, no AIX, no Dragonfly. Todos dão um comportamento semelhante.

Por quê? Posso de alguma forma criar um grupo de processos e ainda gerar ferramentas como vi ?

Plano de fundo

O acima é parte de uma possível extensão do GNU Parallel que permitirá eliminar os grupos de processos em vez dos processos, e é, portanto, um pequeno canto do programa completo. Uma resposta para apenas executar vi foo não é, portanto, uma resposta útil.

    
por Ole Tange 12.05.2015 / 21:14

1 resposta

1

Da página man setpgrp de Darwin / MacOS (baseado em BSD):

If the calling process is not already a session leader, setpgrp() sets the process group ID of the calling process to that of the calling process. Any new session that this creates will have no controlling terminal.

Aqui está sua resposta.

    
por 13.05.2015 / 00:49