2017-09-29 10 views
0

Je veux déboguer un problème entre deux processus idéalement en mettant en place une fenêtre de terminal en lecture seule de ce trafic. Est-ce quelque chose que je peux simplement utiliser pour les utilitaires linux standard existants?Comment puis-je surveiller un FIFO?

Le FIFO vit à /run/myfifo et est créé dans l'un des processus avec:

/* Create a FIFO if one doesn't already exist */ 
int createFifo(char *filepath) { 
    if (access(path, F_OK) == -1) { 
    return mkfifo(filepath, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); 
    } 

    return 0; 
} 

tail -F /run/myfifo?

+0

Pourriez-vous «stracer» les processus et filtrer les appels système lecture/écriture sur le FIFO? –

+0

Vous pourriez toujours juste "chat" le FIFO. Il devrait le traiter comme une socket, auquel cas le comportement est à lire jusqu'à EOF. – bnaecker

Répondre

0

Il existe différentes options pour surveiller cela. Je suppose que vous avez deux processus. Un processus écrit au fifo et l'autre est en train de lire.

Si vous devez déboguer le lecteur et l'enregistreur séparément, vous pouvez utiliser un programme simple tel que cat.

writer-process 

# and in another terminal 
cat /run/myfifo 

ou

reader-process & 

# and in another terminal 
cat > /run/myfifo 

Lorsque vous avez besoin debug écrivain et lecteur ensemble, vous pouvez utiliser strace que Daniel Schepler recommandé. La ligne peut être exécutée avec votre programme et la sortie de journalisation est redirigée vers un autre terminal /dev/pts/4 dans ce cas.

strace -e read -s 999 reader-process 2> /dev/pts/4 

La commande enregistre tous les appels lus à partir de tous les descripteurs de fichiers. Si vous souhaitez filtrer uniquement la lecture depuis le tube, vous devez identifier le descripteur de fichier fifo et grep la sortie. Si l'option n'est pas une option, vous pouvez forcer le lecteur et l'auteur à utiliser des noms fifo différents, puis connecter ces deux fifos dans un programme qui enregistre les données transférées. La variante la plus simple d'un tel connecteur peut être un script comme

cat < /run/mywritefifo | tee /dev/tty > /run/myreadfifo