2010-06-04 5 views
0

J'apprends à programmer sur la plateforme Linux OS et quelle est la mise en œuvre pour exécuter mon application en arrière-plan.Comment lancer une application Linux en arrière-plan?

Comme par exemple dans ce scénario: Lors de l'exécution de mon application dans le shell, elle s'exécutera automatiquement en arrière-plan. Prenez note que je n'ai pas besoin du "&" dans le shell lorsque j'utilise mon application. Quelle est la fonction Linux standard pour réaliser cette implémentation? Et comment puis-je arrêter ou terminer l'application exécutée en arrière-plan dans le code? Ce que je veux dire, c'est que je n'ai pas besoin d'exécuter la commande kill shell pour terminer mon application en arrière-plan? Ou si l'application répond à une condition, alors elle va se tuer ou se terminer.

Merci beaucoup.

Répondre

4

Vous voulez démoniser votre programme. Cela est généralement fait par fork() et quelques autres appels système.

Il y a plus de détails here

applications de fond peuvent être tués en utilisant kill. C'est une bonne pratique pour un démon d'écrire son identifiant de processus (PID) dans un fichier bien connu afin qu'il puisse être localisé facilement.

+0

Qu'est-ce que vous voulez dire est que je dois enregistrer la valeur du PID de l'application dans un fichier de sorte que si je veux mettre fin à la l'application que je viens de lire que la valeur et de l'utilisation cette valeur pour tuer l'application en utilisant la commande kill shell à l'intérieur du même fichier de code? – domlao

+0

@sasayins: Si vous tuez le processus d'un autre programme (pas un script), la fonction 'kill (2)' devrait être utilisée. Si vous voulez tuer votre processus fils par le parent, le fichier PID n'est pas nécessaire car 'fork 'renvoie le PID au parent. –

1

fork(2) vous donne un nouveau processus. Dans l'enfant, vous exécutez l'une des fonctions exec(3) pour le remplacer par un nouvel exécutable. Le parent peut utiliser l'une des fonctions wait(2) pour attendre que l'enfant se termine. kill(2) peut être utilisé pour envoyer un signal à un autre processus.

2

Alors que vous devriez en savoir plus sur fork()exec()wait() et kill(), son juste utiliser parfois plus pratique daemon(3) si elle existe.

Avertissements:

  • Pas dans POSIX.1-2001
  • pas dans tous les BSD de (peut être nommé autre chose, cependant)

Si la portabilité est pas une préoccupation majeure, c'est plutôt pratique. Si la portabilité est une préoccupation majeure, vous pouvez toujours écrire votre propre implémentation et l'utiliser.

De la page de manuel:

SYNOPSIS 
     #include <unistd.h> 

     int daemon(int nochdir, int noclose); 

DESCRIPTION 
     The daemon() function is for programs wishing to detach themselves from the 
     controlling terminal and run in the background as system daemons. 

     If nochdir is zero, daemon() changes the calling process's current working directory 
     to the root directory ("/"); otherwise, the current working directory is left 
     unchanged. 

     If noclose is zero, daemon() redirects standard input, standard output and standard 
     error to /dev/null; otherwise, no changes are made to these file descriptors. 
Questions connexes