2010-07-21 4 views
1

Je dois exécuter une commande linux comme "df" de mon démon Linux pour connaître l'espace libre, l'espace utilisé, la taille totale de la partition et d'autres informations. J'ai des options comme le système d'appel, exec, etc .. popenExécuter les commandes Linux à partir du démon

  1. Mais comme cette chaque commande frayer un nouveau processus, est-ce pas possible d'exécuter les commandes dans le même processus à partir duquel elle est invoquée?

  2. Et en même temps que j'ai besoin d'exécuter cette commande à partir d'un démon linux, car mon démon ne devrait pas contenir de terminal. Cela affectera-t-il mon comportement de démon?

Ou est leur tout C ou API C++ standard pour obtenir les informations de paritions monté

Répondre

4

Il n'y a pas d'API norme, car cela est un concept spécifique à l'OS.

Cependant,

  1. Vous pouvez analyser /proc/mounts (ou /etc/mtab) avec (non portables) getmntent/getmntent_r fonctions d'aide. À l'aide d'informations sur les systèmes de fichiers montés, vous pouvez obtenir ses statistiques avec statfs.
+0

cela donnera également des informations sur l'espace libre et utilisé – Poorna

+0

@siri, j'ai mis à jour la réponse avec une meilleure option (et oui il le fera). –

+0

Et je veux juste confirmer si l'exécution d'une commande à partir du démon est bonne ou mauvaise et quels effets secondaires il peut avoir – Poorna

1

Vous trouverez peut-être utile d'explorer le code source du programme i3status: http://code.stapelberg.de/git/i3status/tree/src/print_disk_info.c

Pour répondre à vos questions:

Mais comme cette chaque commande à lancer un nouveau processus, est-ce pas possible exécuter les commandes dans le même processus à partir de laquelle il est appelé?

No; Les 'commandes' entières sont des programmes autonomes qui doivent s'exécuter dans leur propre processus. En fonction de la fréquence à laquelle vous souhaitez exécuter vos programmes, fork();exec() n'est pas si mal. Il n'y a pas de limites strictes au-delà desquelles il serait préférable de recueillir vous-même des données par rapport à l'exécution d'un programme d'aide. Une fois par minute, vous êtes probablement en train d'exécuter les commandes. Une fois par seconde, vous feriez probablement mieux de rassembler les données vous-même. Je ne suis pas sûr de la ligne de démarcation.

Et en même temps que j'ai besoin d'exécuter cette commande à partir d'un démon linux, car mon démon ne devrait pas contenir de terminal. Cela affectera-t-il mon comportement de démon?

Si la commande appelle setsid(2), puis open(2) sur un terminal sans inclure O_NOCTTY, ce terminal might devient le terminal de contrôle pour ce processus. Mais cela n'influencera pas votre programme, car votre programme a déjà désavoué le terminal en devenant un démon, et comme le processus fils est un leader de session, il ne peut pas modifier le terminal de contrôle de votre processus.

Questions connexes