Je cherche quelque chose que je soupçonne n'existe pas: Un tube nommé non bloquant (fifo) à utiliser depuis la ligne de commande. Une telle chose existe t elle?
Voici le cas d'utilisation: Supposons que j'ai un processus qui va s'exécuter longtemps en arrière-plan et qui génère beaucoup de sortie stdout
. Je ne me soucie pas vraiment de la sortie et je ne veux pas la stocker (peut-être que je n'ai pas assez de place pour), mais je voudrais "entrer" périodiquement et suivre ce qu'elle fait, puis abandonner à nouveau et le laisser faire son travail. Je voudrais donc rediriger sa sortie vers ce canal nommé théorique tamponné et non bloquant, puis y puiser périodiquement.
Donc, fondamentalement, je veux commencer comme ça ( 10M
étant la taille du tampon):
mkmagicfifo magicfifo 10M
spewingprocess > magicfifo &
... et venez régulièrement voir ce qui se passe ...
tail -f magicfifo
... sans magicfifo
stocker toute la sortie (donc, pas un fichier normal), et sans qu'il bloque le processus de crachat quand il se remplit et n'est pas tapé (donc, pas tout à fait un tube nommé normal).
Je ne pense pas que les solutions impliquent tail
ou le prune
feront (enfin, je peux penser à une solution de contournement impliquant tail
), car il tail
faudrait toujours que je stocke toutes les données quelque part (si je veux entrer et sortir de la regarder), et prune
doit réécrire le fichier, vraisemblablement (j'admets que je n'ai pas essayé / prouvé cela) rompant la redirection du processus générant toute la sortie.
Je m'attends à ce que je puisse écrire un utilitaire pour le faire, mais * nix a tellement d' aspects sympas des fichiers et des tuyaux et ainsi de suite, je ne peux pas m'empêcher de penser que cela existe et je ne le sais pas.
Donc: existe-t-il une telle chose, et si oui, qu'est-ce que c'est?
la source
Réponses:
Je pense que ce que vous cherchez, c'est GNU
screen
. Il maintient un tampon pour maintenir le dernier écran plein ou deux de sortie d'un ou plusieurs programmes et vous permet de vous déconnecter et de revenir plus tard.la source
tmux
etdtach
- tout dans la même classe d'application multiplexeur de terminal / gestionnaire de session devrait être capable de réaliser la même chose.Vous pouvez l'utiliser
pv
, il fournit autant de mémoire tampon que vous le souhaitez dans un pipeline. Vous pouvez l'utiliser comme ceci:Cela vous donnerait jusqu'à 1 Go de mémoire tampon entre
spewingprocess
et le fifo. La plupart des distributions Linux proposentpv
dans un package appelé, croyez-le ou nonpv
,.la source
J'ai eu le même problème. Ceci est ma première solution. Commencez par écrire la sortie dans un fichier que nous tronquons après chaque ligne afin qu'il ne se développe pas indéfiniment:
Ensuite, lisez le fichier à l'aide de tail (où
2> /dev/null
se débarrasse du message d'erreur "fichier tronqué"):De cette façon, le tampon ne grandit pas et nous pouvons multiplexer, par exemple, exécuter autant de queues que nous voulons. Cependant, le problème avec cette approche est que nous pouvons perdre des données lorsque nous tronquons plus vite que queue ne peut lire comme le montre ce test:
Après un certain temps, les première et dernière lignes sont:
Mais le fichier a moins de lignes, donc certaines sont perdues:
Cela semble toujours une bonne solution si vous ne vous souciez pas tant de la perte de données ou lorsque votre processus de crachat n'est pas assez rapide pour que les données se perdent.
la source