J'ai une question un peu délicate. Je veux transmettre le résultat d'une commande à une autre, mais comme je travaille sur un système avec une mémoire limitée, je veux m'assurer que le tuyau n'en utilisera pas trop. Mais je ne veux pas que ça casse quand il atteint la limite, passez simplement à l’utilisation du disque en tant que fichier temporaire.
Le cas d'utilisation est le suivant. Je télécharge un gros fichier en utilisant curl ou wget. Je dirige le résultat vers un autre programme (vers un canal nommé, en fait, mais ce canal nommé est immédiatement transmis à une autre commande). Si tout se passe bien, la deuxième commande est en mesure de consommer l’entrée plus rapidement que curl ne peut la sortir (le téléchargement est plus lent que le traitement de la deuxième commande).
Mais parfois, les choses tournent mal et la deuxième commande a besoin de temps pour commencer à le consommer. Ce sera probablement le cas, éventuellement, mais comme cette seconde commande nécessite un peu de RAM et que cette ressource est limitée, je souhaite passer à l'écriture sur disque si le canal commence à utiliser plus de 200 Mo de RAM, par exemple.
Cette deuxième commande peut même nécessiter plus de temps pour démarrer que le temps nécessaire pour télécharger le fichier. Dans ce cas, le fichier téléchargé doit être entièrement écrit sur le disque afin que le second processus puisse le consommer ultérieurement.
Y at-il une solution pour un problème aussi stupide?
/dev/zero
via deux-mbuffer
à/dev/null
. Avec deux tampons basés sur la mémoire, c'était rapide. Avec un tampon basé sur disque et un tampon basé sur la mémoire, le débit était limité et correspondait à la vitesse du disque.