J'utilise la file d'attente de messages comme une adresse IP entre 2 programmes. Maintenant, je veux envoyer des données d'un programme à l'autre en utilisant la file d'attente de messages, puis intimez-le via un signal SIGINT. Je ne sais pas comment envoyer un signal d'un programme à un autre. Quelqu'un peut-il fournir un code d'échantillon s'il a la solution?comment envoyer le signal d'un programme à un autre?
Répondre
Le signal dans linux peut être envoyé en utilisant kill system call, vérifiez simplement ce link pour la documentation de l'appel et de l'exemple du système kill. vous pouvez voir l'homme -2 tuer aussi. et il est déconseillé d'utiliser SIGINT utiliser SIGUSR1 ou SIGUSR2
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
comment obtenir le pid d'un autre processus dans ce programme. – Chaithra
Il existe plusieurs façons de le faire. Si l'un est le parent de l'autre, le parent obtient le pid de l'enfant quand il appelle fork(), et l'enfant peut obtenir le parent avec getppid(). Si ce n'est pas le cas, vous pouvez mettre le pid dans un endroit convenu. Par exemple, un fichier que l'on écrit pour l'autre. –
oui. D'accord. mais si c'est un autre programme ..? alors comment envoyer le processid à ce programme .. pouvons-nous envoyer en utilisant une socket? – Chaithra
system("kill -2 `pidof <app_name_here>` ");
Il s'agit d'une manière * très * désordonnée d'envoyer un signal d'un processus à un autre. Pourquoi ne pas utiliser les appels système kill() ou sigqueue()? – slacy
Notez qu'en utilisant l'appel système sigqueue(), vous pouvez passer un morceau supplémentaire de données ainsi que votre signal. Voici une brève citation de « l'homme 2 sigqueue »:
L'argument de valeur est utilisée pour spécifier un élément d'accompagnement des données (soit un entier ou une valeur de pointeur) pour être envoyé avec le signal, et a le type suivant:
union sigval {
int sival_int;
void *sival_ptr;
};
Ceci est un moyen très pratique pour passer un petit peu d'information entre les 2 processus. Je suis d'accord avec l'utilisateur ci-dessus - utiliser SIGUSR1 ou SIGUSR2 et un bon sigval, et vous pouvez passer ce que vous voulez.
Vous pouvez également passer un pointeur sur un objet dans la mémoire partagée via sival_ptr, et passer un objet plus grand de cette façon.
- 1. comment envoyer un signal à la page Web
- 2. Comment enregistrer un modèle sans envoyer de signal?
- 3. Linux recevoir le signal de rupture pour le programme ttycontrol
- 4. Envoyer une frappe à un autre contrôle
- 5. Déboguer le signal du programme Iphone reçu: "EXC_BAD_ACCESS"
- 6. Envoyer le texte à un autre serveur de messagerie
- 7. Qt QSystemTrayIcon ne pas envoyer le signal activé
- 8. Comment envoyer un paquet ARP à partir d'un programme C?
- 9. Comment passez-vous un message d'un programme à un autre?
- 10. Comment créer un nouveau signal dans pygtk
- 11. comment envoyer le caractère de retour (entrer le bouton) à travers le programme
- 12. Malheurs du signal Python: Le gestionnaire SIGQUIT retarde l'exécution si SIGQUIT est reçu pendant l'exécution d'un autre gestionnaire de signal?
- 13. Comment envoyer du courrier à partir d'un programme Ruby?
- 14. Comment envoyer des emails via un programme C++?
- 15. Comment envoyer des arguments optionnels à une autre fonction/méthode?
- 16. Comment piéger le signal sur ruby fonctionnant sur Windows
- 17. comment envoyer des sms par programme?
- 18. comment déterminer le signal WiFi dans l'iPhone
- 19. iPhone OpenGLES: Les textures consomment trop de mémoire et le programme plante avec le signal "0"
- 20. Comment envoyer un correctif à un autre développeur et éviter les conflits de fusion?
- 21. C programme qui imprime un autre programme C en japonais
- 22. Envoyer un JPanel à l'imprimante
- 23. comment obtenir le pid d'un processus qui a envoyé un signal SIGABRT à un autre processus qui a quitté le noyau de dumping
- 24. Comment envoyer des utilisateurs à un autre "site" dans Apache tout en utilisant mod_proxy?
- 25. Comment envoyer un message d'une instance d'une application gérée à une autre?
- 26. Comment envoyer une commande à un programme Java en cours d'exécution?
- 27. remplacer le verrou d'essorage avec le signal
- 28. Comment envoyer des variables d'un contrôle utilisateur à un autre sans utiliser de session?
- 29. Comment envoyer un fichier sur un réseau en utilisant le canal de socket dans java
- 30. Passer le résultat d'un fichier batch à un autre?
Je tiens à ajouter: il est déconseillé de les utiliser, car ce sont des signaux standards. Il est préférable d'utiliser les signaux en temps réel, qui commencent à partir de SIGTRMIN. ils ont des avantages importants. – Tebe