Implementando um 단순 백그라운드 작업 com UNIX 명명된 파이프
Neste artigo vamos explorar "pipes nomeados", ou named pipes , e como este modelo de dados pode ajudar a entender o funcionamento de um background job.
FIFO와 익명 파이프
FIFO "First in, first out"을 재조정하십시오.
Primeiro a entrar, primeiro a sair
Parece com filas né? 마스 엔트레탄토...
São unidirecionais
...pois caminham apenas em um sentido, e nunca de forma "bidirecional":
### ----> going this way ---->
$ echo 'my precious' | md5 | base64
Para que sejam bidirecionais, seria preciso que um processo enviasse mensagem de volta para o outro.
E há uma solução para isto.
명명된 파이프
Com o comando
mkfifo
, podemos criar uma pipe nomeada e usá-la entre diferentes comandos para comunicação através dos streams.Para criar comunicação bidirectional, teríamos que criar duas FIFO, mas para nosso simples example, vamos manter unidirecional com apenas uma FIFO.
Esta pipe poderá servir como uma fila FIFO:
$ mkfifo myqueue
$ ls -la myqueue
prw-r--r-- 1 leandronsp staff 0B Jun 14 23:09 myqueue
파이프 활용
Podemos jogar saídas de comandos para dentro do pipe, por exemplo com este processo "escritor":
$ echo 'my precious' | base64 > myqueue
O processo fica bloqueado à espera que algum outro processo "leitor"leia da fila. 예를 들어:
$ cat myqueue
bXkgcHJlY2lvdXMK
O inverso também pode acontecer, onde começamos pelo leitor:
$ cat myqueue
Que fica bloqueado à espera de "mensagens na fila". E assim outro processo escritor pode enenen mensagem:
echo 'my precious' | base64 > myqueue
Janela do leitor:
bXkgcHJlY2lvdXMK
프로세스 assíncrono
Esta funcionalidade básica abre portas para o processamento assíncrono de mensagens, onde podemos ter um "worker"que fica infinitamente à espera de mensagens no pipe, ao passo que diferentes "publicadores"colocam mensagens no pipe de forma assíncrona.
Estamos falando de background jobs .
Criando um worker que decodifica base64
Vamos então criar um worker simples em Shell script que recebe uma mensagem codificada em base64, decodifica, mostra-a no screen (STDOUT) e volta para o loop à espera de mais mensagens no pipe:
sidequack.sh
#!/bin/bash
## Cria o named pipe
mkfifo myqueue
echo "Waiting for jobs in the queue..."
## Loop infinito
while true
do
## Bloqueia à espera de mensagem no pipe
ENCODED=`cat myqueue`
## Nova mensagem chegou no pipe...
echo "Going to perform Job..."
echo "Encoded: $ENCODED | Decoded: `echo $ENCODED | base64 -d`"
done
bash sidequack.sh
Waiting for jobs in the queue...
Agora, em outra janela, podemos colocar no pipe diferentes "jobs"a serem processados:
echo 'my precious' | base64 > myqueue
echo 'pipes are awesome' | base64 > myqueue
Podemos Consultar no terminal do worker:
Going to perform Job...
Encoded: bXkgcHJlY2lvdXMK | Decoded: my precious
Going to perform Job...
Encoded: cGlwZXMgYXJlIGF3ZXNvbWUK | Decoded: pipes are awesome
결론
유닉스의 기능은 유닉스에서 명명된 파이프와 다양한 종류의 프로세스에 대해 다양한 프로세스를 제공하고 있으며 FIFO는 간단한 백그라운드 작업을 구현하는 데 사용됩니다.
Reference
이 문제에 관하여(Implementando um 단순 백그라운드 작업 com UNIX 명명된 파이프), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leandronsp/implementando-um-simples-background-job-com-unix-named-pipes-3eja텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)