Si non, comment pouvons-nous démarrer un processus d'arrière-plan en C?Pouvons-nous démarrer un processus d'arrière-plan en utilisant exec() donnant & comme argument?
Répondre
Utilisez l'appel fork()
pour créer un nouveau processus, puis exec() pour charger un programme dans ce processus. Voir les pages de manuel (man 2 fork
, man 2 exec
) pour plus d'informations.
Dans Unix, exec() n'est qu'une partie de l'histoire. Exec() est utilisé pour démarrer un nouveau binaire dans le processus courant.
Cela signifie que le fichier binaire en cours d'exécution dans le processus en cours ne sera plus exécuté. Donc, avant d'appeler exec(), vous voulez appeler fork() pour créer un nouveau processus afin que votre binaire actuel puisse continuer à fonctionner.
Normalement, pour que le fichier binaire en cours attende la fin du nouveau processus, vous devez appeler l'une des familles wait *(). Cette fonction mettra le processus en cours en veille jusqu'à ce que le processus que vous attendez soit terminé. Donc, pour créer un processus en "arrière-plan", votre processus actuel devrait simplement ignorer l'appel en attente.
fourche retourne le PID de l'enfant, de sorte que l'idiome commun est:
if(fork() == 0)
// I'm the child
exec(...)
- 1. En utilisant une propriété comme argument d'attribut
- 2. cruisecontrol.net exec exec
- 3. fork() comme argument
- 4. Démarrer un nouveau processus dans une transaction
- 5. Pass HttpPostedFileBase comme argument
- 6. hachage comme argument def
- 7. utiliser un paramètre global comme argument d'attribut
- 8. Pouvez-vous passer un "type" comme argument?
- 9. Passer un pointeur au processus engendré avec exec()
- 10. en utilisant le mot clé 'class' comme/dans un argument de méthode dans C#
- 11. Est-il possible pour UAC élever un processus sans démarrer un autre processus
- 12. nom de fichier comme argument
- 13. (22) Argument invalide: FastCGI: gestionnaire de processus sortant, setgid() échoué
- 14. Le passage d'une classe ** comme argument
- 15. Comment démarrer le processus de jumelage Bluetooth?
- 16. Meilleure façon de surveiller un processus pour démarrer
- 17. Python: en utilisant un algorithme récursif comme un générateur
- 18. donnant un EJB un JNDI
- 19. Comment démarrer plusieurs processus dans Drools Flow?
- 20. Passer une chaîne comme argument à un contrôleur
- 21. Comment démarrer de manière itérative dans VB.NET? ou argument changement dynamique
- 22. Intégration de HWND dans un processus externe en utilisant SetParent
- 23. Existe-t-il un moyen d'utiliser un référentiel comme "modèle" pour démarrer un nouveau référentiel?
- 24. int (bla) donnant réponse différente de (bla) comme int
- 25. Appel d'une fonction avec un argument out utilisant Invoke
- 26. Afficher l'état du processus en utilisant AJAX et ASP.NET MVC
- 27. Comment démarrer un processus sur une machine distante en C++ sous Windows
- 28. Passer des options de ligne de commande ant à un processus ant 'exec'?
- 29. exec() ne fonctionne pas comme prévu dans PHP
- 30. Oracle INSERT donnant une erreur en C#
fork et exec n'a rien à voir avec le processus d'arrière-plan – avd
@aditya: Voulez-vous d'étendre à ce sujet? fork() est comment créer un nouveau processus, ce que vous devez faire si vous voulez exécuter quelque chose en arrière-plan à partir d'un programme en C ... – unwind
@aditya fork a exactement 100% à faire avec un processus d'arrière-plan. Qu'est-ce que tu racontes? –