как отправить сигнал из одной программы в другую? - PullRequest
6 голосов
/ 12 марта 2009

Я использую очередь сообщений как ipc между 2 программами. Теперь я хочу отправить данные из одной программы в другую, используя очередь сообщений, а затем передать их через сигнал SIGINT.

Я не знаю, как отправить сигнал из одной программы в другую. Кто-нибудь может предоставить пример кода, если у них есть решение.

Ответы [ 4 ]

11 голосов
/ 12 марта 2009
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
5 голосов
/ 12 марта 2009

Сигнал в Linux можно отправить с помощью системного вызова kill, просто проверьте эту ссылку для документации системного вызова kill и примера. Вы также можете видеть, как убивают человека -2. и не рекомендуется использовать SIGINT использовать SIGUSR1 или SIGUSR2

1 голос
/ 13 марта 2009

Обратите внимание, что с помощью системного вызова sigqueue () вы можете передать дополнительный фрагмент данных вместе со своим сигналом. Вот краткая цитата из "sigqueue человека 2":

Аргумент значения используется для указания сопутствующий элемент данных (либо целое число или значение указателя) послал с сигналом, и имеет следующий тип:

     union sigval {
         int   sival_int;
         void *sival_ptr;
     };

Это очень удобный способ передачи небольшого количества информации между двумя процессами. Я согласен с пользователем выше - используйте SIGUSR1 или SIGUSR2 и хороший сигвал, и вы можете передать все, что захотите.

Вы также можете передать указатель на некоторый объект в разделяемой памяти через sival_ptr и таким образом передать объект большего размера.

0 голосов
/ 12 марта 2009
system("kill -2 `pidof <app_name_here>` ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...