J'ai deux applications en cours d'exécution sur ma machine. L'un est censé remettre le travail et l'autre est censé faire le travail. Comment puis-je m'assurer que la première application/le processus est en attente. Je peux vérifier via les ressources sa consommation, mais cela ne le garantit pas. Quels outils devrais-je utiliser?Comment vérifier si une application est en attente
Répondre
Vos 2 applications doivent communiquer. Il y a plusieurs façons de le faire:
- Envoie des messages via des sockets. De cette façon, les deux processus peuvent s'exécuter sur des machines différentes si vous utilisez des sockets réseau normaux au lieu des sockets locaux. Si vous utilisez C, vous pouvez utiliser des sémaphores avec semget/semop/semctl. Il devrait y avoir des interfaces pour cela dans d'autres langues.
- Les canaux nommés se bloquent jusqu'à ce qu'une opération de lecture et une opération d'écriture soient en cours. Vous pouvez l'utiliser pour la synchronisation.
- Les signaux sont également bons pour cela. En C, il est appelé sendmsg/recvmsg.
- DBUS peut également être utilisé et a des liaisons pour les langues variuos.
Mise à jour: Si vous ne pouvez pas modifier l'application de traitement, il est plus difficile. Vous devez compter sur certains signes qui indiquent les progrès. (Je suppose que votre application de traitement lit un fichier, puis un traitement écrit le résultat dans un fichier de sortie.) Savez-vous quelle devrait être la taille finale du résultat? Si c'est le cas, vous devez vérifier la taille à plusieurs reprises (ou chaque fois que cela change).
Si vous ne connaissez pas la taille, mais vous savez comment le traitement fonctionne, vous pouvez l'utiliser. Par exemple, le traitement est effectué lorsque le fichier de sortie est fermé. Vous pouvez utiliser strace pour voir tous les appels système, y compris la fermeture. Vous pouvez remplacer la fonction close() par la variable d'environnement LD_PRELOAD (sous Windows, replace dlls). De cette façon, vous pouvez modifier le programme de traitement sans vraiment le recompiler ou même avoir accès à sa source.
Vous pouvez utiliser des tubes nommés - la première application lira à partir de celle-ci mais elle sera vide et par conséquent elle continuera à attendre (bloquée). La deuxième application va écrire dedans quand elle veut que le premier continue.
Rien ne garantit que votre application est en attente. Vous devez passer un peu de travail et obtenir une réponse. Il peut s'agir de transactions ou non - l'application peut confirmer qu'elle a traité le message avant qu'il ne commence à le traiter ou après qu'il ait été traité (avec succès ou non). Si ça n'attend pas, passer un morceau de travail devrait échouer. Que ce soit lorsque vous essayez d'écrire sur un socket TCP/IP ou d'autres moyens, ou si le délai d'attente se produit. Cela dépend de la mise en œuvre, du type de transport que vous utilisez et d'autres exigences. Il existe en fait un moyen de déterminer si le processus (thread) est en état de blocage et en attente de données sur un socket (ou une autre source), mais cela signifie que le client doit être sur le même ordinateur et avoir des privilèges d'accès requis pour le faire, mais cela n'a pas de sens autre que le débogage, ce que vous pouvez faire en utilisant n'importe quel débogueur de toute façon. Dans l'ensemble, l'idée de s'assurer que l'application attend des données avant de tenter de les transmettre est que les données sont mauvaises. Sans parler de la condition de course - que se passerait-il si vous aviez vérifié et que c'était OK, et quand vous avez essayé d'envoyer les données, vous avez découvert que l'application n'attend pas à ce moment-là (même si c'est en microsecondes).
- 1. Comment vérifier si une application est en debug ou release
- 2. Comment vérifier par programme si une application est installée?
- 3. Comment savoir si jQuery a une requête Ajax en attente?
- 4. Android: Comment vérifier si une notification en attente a été envoyée?
- 5. Rejetant une application qui est en attente développeur de presse
- 6. Comment déterminer si une application Web est en cours d'exécution
- 7. Comment vérifier si une session est invalide
- 8. Comment vérifier si une liste est vide en Python?
- 9. Comment vérifier si une socket est connectée/déconnectée en C#?
- 10. Comment vérifier si une connexion MySQL est fermée en Python?
- 11. Comment détecter si une application COM est en cours d'exécution?
- 12. Comment puis-je vérifier si une application fonctionne sous Android?
- 13. Comment vérifier si l'utilisateur se connecte dans une application Web?
- 14. Comment vérifier si une application peut être désinstallée?
- 15. Comment vérifier si une variable est une valeur numérique?
- 16. Comment déterminer si une application est une application Web
- 17. Comment vérifier si une valeur donnée est une liste générique?
- 18. Java: Comment vérifier si l'objet est nul?
- 19. Comment vérifier si un caractère est en majuscule en Python?
- 20. Comment vérifier si une exception personnalisée est déclenchée dans une application Ruby?
- 21. Vérifier si une application est toujours en cours d'exécution à partir d'un fichier batch?
- 22. Ruby: Comment vérifier si une chaîne est une heure valide?
- 23. Comment vérifier si une valeur donnée est une URL valide
- 24. Comment vérifier si le serveur Web est en panne? (C#)
- 25. vérifier si une chaîne est un double
- 26. Comment vérifier si une valeur de const char * est définie?
- 27. Python - Comment vérifier si un fichier est utilisé par une autre application?
- 28. Comment vérifier si javascript est désactivé?
- 29. Comment vérifier si le formulaire est maximisé?
- 30. Comment déterminer si OS est une ROM personnalisée d'une application?
Recherchez la bague à jeton: D – sje397
Je suis désolé. J'ai oublié de mentionner que je ne développais pas cette application, je la testais seulement. Je sais que le débogage est moyen, mais je me demandais si des outils comme procexplorer etc peuvent aider – user393148
Dans ce cas, je ne pense pas qu'il existe un moyen qui fonctionne toujours. J'ai ajouté quelques possibilités à ma réponse mais elles peuvent ne pas être applicables dans votre cas. – stribika