3 votes

les tuyaux nommés ne fonctionnent apparemment pas/ne répondent pas ?

J'essaie d'utiliser les named pipes comme un moyen pratique de prétraiter les entrées à la volée pour les pipelines qui, malheureusement, n'acceptent pas directement les données de stdin.

Partout où je cherche des informations, j'obtiens essentiellement la même chose : Les tuyaux nommés doivent être très simples à utiliser.

L'essentiel est que ce qui suit devrait fonctionner :

mkfifo mynamedpipe echo "is this working?" > mynamedpipe cat mynamedpipe

quand j'exécute mkfifo mynamedpipe le tuyau est créé avec succès et visible avec ls * .

Mais même après m'être accordé la permission d'écrire sur ce tube, quand j'essaie d'exécuter echo "whatever" > mynamedpipe rien ne se passe et le terminal se bloque jusqu'à ce que je tue le processus avec ctrl+c .

J'ai ce problème sur ma machine linux locale (Ubuntu 14.04.5 LTS) ainsi que sur un serveur public (Red Hat Enterprise Linux 7), et en zsh ainsi qu'en bash.

Qu'est-ce que je fais de mal ici ?

1 votes

Essayez cat < mynamedpipe . notez également cette citation de linuxjournal.com/article/2156 : "Si vous regardez attentivement, vous remarquerez que la première commande que vous exécutez semble se bloquer. Cela se produit parce que l'autre extrémité du tuyau n'est pas encore connectée, et donc le noyau suspend le premier processus jusqu'à ce que le second processus ouvre le tuyau. Dans le jargon Unix, on dit que le processus est "bloqué", car il attend que quelque chose se passe."

0 votes

Merci, cela clarifie les choses pour moi. Mais il est ennuyeux que pratiquement tous les tutoriels sur ce sujet (ou du moins tous les résultats les plus importants sur Google) décrivent exactement les étapes de base que j'ai postées ci-dessus, en indiquant qu'elles devraient fonctionner "telles quelles", sans jamais aborder ce problème. Est-ce quelque chose qui a changé ces derniers temps ?

0 votes

Vous devez utiliser le lecteur ( cat mynamedpipe ) premièrement . Ce qui signifie que vous avez besoin de deux terminaux. Aussi, ça sent comme un Question XY . Veuillez expliquer le problème réel que vous essayez de résoudre : Quels sont ces "pipelines qui, malheureusement, n'acceptent pas directement les données de stdin" exactement ?

1voto

harrymc Points 394411

Ce message semble correspondre à votre problème : Le chat vers un tuyau nommé provoque un blocage .

Les remarques pertinentes sont :

  • Vous devez avoir quelque chose qui lit la FIFO.
  • Assurez-vous que le tube est créé avec un tampon suffisamment grand ou que les lecteurs sont assez rapides pour éviter les blocages
  • Vous devez affecter le tube à un descripteur de fichier, comme dans :

    exec 3<>/tmp/stream_pipe

0 votes

Merci pour l'information. Malheureusement, cela semble signifier que les tubes nommés ne sont pas une alternative pour moi, puisque cette personne déclare également que le fait d'essayer de changer la taille du tampon n'a rien changé pour lui. Je cherchais une alternative pour me brancher avec des outils en aval qui ne lisent pas à partir de stdin, de sorte que le tuyau n'est pas nécessairement consommé comme il est écrit. Il est logique que les tuyaux se comportent de cette façon. Donc retour à l'écriture et à la lecture de fichiers temp-files physiques intermédiaires pour moi...

0 votes

Les tuyaux nommés sont agréables mais ne sont malheureusement pas une solution pour les données potentiellement très volumineuses.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X