Como iniciar um pipe como um processo persistente

1

Digamos que você execute um arquivo executável desta maneira:

$ echo <params> | <process>

Se process não for executado como um canal, digite $ process & e ele continuará em execução. O que é necessário na linha de comando acima para iniciar process persistentemente?

Atualização:

Mais precisamente, w3mimgdisplay pode ser executado como um processo persistente, é assim que w3m mantém as imagens exibidas em um terminal após a rolagem. Como este programa pode ser executado da linha de comando?

echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' | /usr/lib/w3m/w3mimgdisplay
    
por nightcod3r 05.06.2017 / 06:42

1 resposta

2

Parece que você precisa de pipes nomeados:

link

Basicamente, você cria um pipe nomeado, executa o processo que obtém entrada do pipe nomeado e, em seguida, passa o que quiser para o pipe nomeado para que ele seja processado pelo processo.

Por exemplo:

mkfifo /tmp/namedpipe
tail -f /tmp/namedpipe &
echo "BOO"> /tmp/namedpipe
echo "this" > /tmp/namedpipe

Isto irá ecoar (por cauda) para stdout tudo o que é enviado para o / tmp / namedpipe.

Eu uso tail em vez de cat, porque cat sairá do processo quando receber EOF.

UPD. Esclarecimento.

Para passar isso ao seu processo, você precisa fazer algo assim:

tail -f /tmp/namedpipe | yourprocess &

UP2. Então, no seu caso, a sequência seria assim:

mkfifo /tmp/namedpipe 

--- este será o ponto de entrada através do qual você pode enviar dados para o seu processo.

tail -f /tmp/namedpipe |  /usr/lib/w3m/w3mimgdisplay &

- isso criará o processo persistente que você deseja e, no futuro, fornecerá um feed a ele enviando pelo canal.

echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' > /tmp/namedpipe

Deve mostrar a imagem na tela.

A partir de agora, quaisquer outras coisas que você enviará para / tmp / namedpipe serão como novas linhas ecoadas no comando e também devem aparecer na tela.

    
por 05.06.2017 / 09:29