2010-11-22 4 views
3

Supposons que je crée un thread à partir de mon thread "principal", qui vise à surveiller et imprimer certaines variables dans "main". Mais "main" génère aussi une sortie, donc je veux imprimer les sorties de ces deux threads séparément. Comment puis-je rediriger la sortie du nouveau thread vers une nouvelle console autre que celle utilisée dans mon programme c? Que penseriez-vous qu'il se passe dans un tel cas (extérieurement)?sortie vers un nouveau terminal

+0

Sur quel système d'exploitation est-il exécuté? –

+0

Système d'exploitation Fedora – sinoTrinity

+2

Nitpick: Fedora n'est pas un système d'exploitation. C'est une distribution. – Falmarri

Répondre

0

Si vous exécutez un programme, vous êtes connecté à une console. Vous n'avez bien sûr pas besoin d'écrire une sortie sur la console (vous pouvez utiliser des fichiers), mais la console ne peut évidemment pas être dupliquée.

Vous n'utilisez pas un descripteur de fichier différent?

+0

Fondamentalement, j'ai deux threads, l'un agissant en tant que serveur et l'autre client. Et je veux surveiller le statut des deux via des consoles en temps réel. Si j'imprime les deux sorties sur la même console, elles sont entrelacées et donc peu lisibles. Donc, je me demande s'il existe un moyen de produire deux consoles différentes, une pour le serveur et l'autre pour le client, dans mon programme c? – sinoTrinity

+0

@sino Je suppose que j'aurais dû être plus clair. Non tu ne peux pas. Encore une fois, que diable cela ferait-il sur le système? Que faire si la console est ouverte via SSH ou s'il s'agit d'un moniteur physique à l'ancienne. Pour réitérer, pourquoi n'écrivez-vous pas simplement dans un descripteur de fichier différent? –

+0

Parce que je veux afficher les deux sorties en temps réel. Si j'écris dans un fichier, il se peut que je doive taper quelque chose comme «tail -f» de temps en temps pour être mis à jour. – sinoTrinity

2

Je produirais les informations de surveillance dans un fichier, puis utiliser tail -f filename pour l'afficher dans mon autre terminal.

Cela a l'avantage que vous pouvez exécuter grep ou ce que vous avez sur la sortie.

+0

Je devrais taper quelque chose comme "tail -f" de temps en temps. Existe-t-il un moyen de surveiller dynamiquement le contenu d'un fichier via la console? C'est-à-dire, si quelque chose est ajouté au fichier, la console défilerait automatiquement et afficherait le nouvellement ajouté juste comme "printf()" à lui? – sinoTrinity

+3

@sino Vous venez de décrire ce que 'tail -f' fait. –

2

Je voudrais écrire les données dans un fichier journal, puis utiliser tail -f log_file.txt à partir d'une autre fenêtre pour le regarder depuis de cette façon, vous gardez une copie des données, mais si vous décidez que vous devez utiliser des terminaux séparés alors vous pouvez simplement ouvrir le nouveau terminal (tty) comme un fichier normal. Le principal problème avec ceci est que vous voulez probablement vraiment ouvrir une nouvelle fenêtre de terminal pour vous aussi. L'ouverture d'une nouvelle fenêtre de terminal pour faire quelque chose comme ceci est difficile et est différente entre les différents émulateurs de terminaux. Here est une autre question sur l'ouverture de nouveaux terminaux à partir d'un fichier make. Vous pouvez essayer de faire la même chose à partir de votre programme ou d'un script qui exécute votre programme et exécuter cat ou tail dans le nouveau terminal pour être votre fenêtre de journal.

#!/bin/sh 
truncate --size=0 ./logfile.txt 
xterm "tail -f ./logfile.txt" 2>&1 > /dev/null & 
your_program --log-file=./logfile.txt 

Je ne connais pas actuellement de meilleure façon d'accomplir cela.

Une autre chose que vous pourriez vouloir examiner est syslog.

Questions connexes