2010-09-28 39 views
1

Comment mon programme peut-il détecter comment il a été démarré: par quelqu'un utilisant la ligne de commande ou par un autre processus?Linux: comment détecter comment un processus a été démarré

Le programme a une partie interactive facultative que je veux supprimer quand elle a été démarrée par un autre processus - en cours d'exécution en arrière-plan; mais quand il a été démarré à partir d'un terminal, je veux qu'il fasse le bit interactif.

[edit] S'il est possible de le faire depuis un programme C++.

Répondre

3

Vérifiez si votre stdin isatty, par exemple

if (isatty(0)) 
{ 
    /* interactive! */ 
} 
+0

Cela ne fonctionnera que si le programme invoquant redirige stdin. – Darron

1

Généralement, fournissez simplement des arguments de ligne de commande que l'appelant peut utiliser pour s'exécuter en mode non interactif. Vous pouvez faire des choses plus chics, mais c'est assez commun - souvent, c'est du calme.

+0

okay, pourrait être utilisable. Je vais y réfléchir. Je sais que j'ai vu quelque part un programme/script faisant quelque chose pour détecter s'il a été démarré à partir d'un terminal ... J'avais une copie, mais ça s'est passé au grand-grand-bitbucket-dans-le-ciel, un événement qui a donné lieu à ma question sur ce site sur les sauvegardes. – slashmais

1

Bash a un simple test qui vous dira si le script a été lancé à partir d'un ATS:

if [ -t 0 ]; then 
    echo "Interactive code goes here" 
fi 
1

<unistd.h> définit la isatty fonction que vous pouvez utiliser pour vérifier si les descripteurs de fichier d'entrée (0) ou de sortie (1) sont connectés à un terminal (ce qui signifie qu'il s'agit d'une session interactive).