Estou cansado do limite "apenas um parágrafo" nos comentários =)
Se você iniciar um shell sh
e obter o pid $pid
, poderá localizar os descritores de arquivo conforme descreve. Um exemplo:
$ ls -l /proc/29201/fd
total 0
lrwx------ 1 eroen users 64 Mar 22 15:52 0 -> /dev/pts/2
lrwx------ 1 eroen users 64 Mar 22 15:52 1 -> /dev/pts/2
lrwx------ 1 eroen users 64 Mar 22 15:52 2 -> /dev/pts/2
lrwx------ 1 eroen users 64 Mar 22 15:52 255 -> /dev/pts/2
Você notará que 1
, 2
e 3
são todos links simbólicos para o mesmo tty (um chardev). Em outras palavras, a entrada para o processo é lida no mesmo nó de dispositivo em que as saídas são gravadas.
Quando você tenta escrever (em um processo diferente) no mesmo tty (como /proc/$pid/fd/0
ou /dev/pts/?
, você realiza exatamente a mesma coisa que o processo em si quando grava dados em sua saída; os dados mostram na janela do terminal.
Realmente mudar onde o ponto fd [0-2] depois de iniciar um processo é bastante complicado, mas não impossível. Reptyr é um aplicativo gratuito de código aberto que modifica um processo existente, por isso é fd [0-2] apontar para um diferente tty (assim como algumas outras coisas). Isso é realizado através da estrutura ptrace . O post também menciona outros softwares que fazem a mesma coisa, e que isso pode ser feito através de gdb .
Dependendo do que você realmente deseja realizar, você pode descobrir que o Reptyr ou algum outro software faz o que você precisa. Caso contrário, você pode olhar / copiar / modificar o código-fonte e descobrir como eles fazem o truque.
Adendo: Este contém alguns diagramas ilustrativos, em particular, o terceiro esquema a partir do topo.