fork est utilisé pour créer une copie du processus à partir de laquelle il est appelé. Ceci est généralement suivi par des appels à la famille de fonctions exec. Y a-t-il d'autres utilisations de la fourchette? Je peux penser à un. Faire IPC avec des fonctions de tuyau.Applications de fourche appel système
Répondre
Si vous avez une sorte de serveur à l'écoute des connexions entrantes, vous pouvez utiliser un processus enfant pour gérer la requête entrante (qui n'impliquera pas nécessairement exec ou pipes).
Oui bien sûr. Il est assez courant de démarrer un processus, de procéder à l'initialisation des données, puis de générer plusieurs travailleurs. Ils ont tous les mêmes données dans leur espace d'adressage et c'est Copy On Write.
Une autre chose courante est que le processus principal écoute un socket TCP et fork() pour chaque connexion. De cette façon, les nouvelles connexions peuvent être traitées immédiatement alors que les connexions existantes sont traitées en parallèle.
Je pense que vous oubliez qu'après un fork(), les deux processus ont accès à toutes les données qui existaient dans le processus avant le fork().
Une autre utilisation de fork est de se détacher du processus parent (revenant à init, processus 1). Si un processus, disons bash avec pid 1111, démarre myserver qui obtient pid 2222, il aura 1111 comme parent. Supposons 2222 forks et l'enfant obtient 3333 pid. Si maintenant le processus 2222 se termine, le 3333 perdra son parent, et à la place il obtiendra init comme son nouveau parent.
Cette stratégie est parfois utilisée par les deamons au démarrage pour ne pas avoir de relation parent avec le processus qui l'a démarré. Voir aussi this answer.
Une « utilisation » de la fourche est de créer un Fork Bomb
J'ai écrit une petite coquille, et il était plein de fourches (oui c'est exec ..), en particulier pour les éléments de tuyauterie. wikipedia page on pipe
- 1. F # tuyau fourche
- 2. Éviter une fourche()/Conditions de course SIGCHLD
- 3. Système d'authentification pour les applications Web ASP.NET?
- 4. Sélectionnez() appel système dans les discussions?
- 5. UNIX Appel système pour enregistrer un processus d'arrière-plan
- 6. En Perl, comment faire un appel système non bloquant?
- 7. comment passer int/char dans le système() un appel système Linux
- 8. Comment verrouiller IO partagé par fourche dans ruby
- 9. Fourche et synchronisation du référentiel Google Code Subversion dans GitHub
- 10. Système d'aperçu de journalisation pour les journaux provenant de plusieurs applications
- 11. Comment créer un répertoire de système de fichiers dans un appel/requête SQL Server 2005
- 12. Applications Web et applications de bureau
- 13. Comment créer un système de comptes globaux à utiliser dans plusieurs applications?
- 14. COMException: la zone de données transmise à un appel système est trop petite
- 15. Appel Py_Finalize() de C
- 16. Pourquoi les dates d'analyse de fourche RSS.Net de telligent ne sont-elles pas?
- 17. Appel de l'application à partir de rails
- 18. WebLogic "L'application MDB n'est PAS connectée au système de messagerie"
- 19. PHP: appel direct d'autres applications web PHP sans passer par l'appel HTTP habituel
- 20. Critique mon schéma de système d'authentification DB?
- 21. Comment puis-je faire en sorte que plusieurs applications utilisent le même système d'authentification?
- 22. Quel serait un bon moyen d'ajouter un système d'aide aux applications Silverlight?
- 23. Comment capturer le résultat d'un appel système dans une variable shell?
- 24. Utilisation d'un seul système() Appel pour exécuter plusieurs commandes dans C
- 25. En python, comment puis-je faire un appel système non bloquant?
- 26. Existe-t-il une bonne description du mécanisme "appel système" utilisé dans les systèmes d'exploitation?
- 27. Appel de méthodes natives Java intégrées
- 28. Comment réexpédier un appel système original avec un nom différent sur aix?
- 29. Applications de bureau PHP
- 30. Architecture/Maintenance/Déploiement de grandes applications
Oui Bien sûr. Merci. – Ankur
Il y a aussi la "fourche, laissez une instance continuer à travailler et le second point de contrôle l'état de calcul à un stockage stable". – Vatine
Je suppose que cela ne peut pas être réalisé en utilisant seulement plusieurs threads .. est-ce parce que pour allouer de nouvelles ressources (TCP Sockets) nous avons besoin de nouveaux processus et threads seuls ne peuvent pas le faire car ils partagent des ressources communes? –