2
한 프로세스에서 다른 프로세스로 신호를 보낼 때 길이가 인 값을 보내려고합니다. 그게 가능하니? SIGUSR1을 사용하고 있습니다.리눅스에서 신호로 정보 보내기
한 프로세스에서 다른 프로세스로 신호를 보낼 때 길이가 인 값을 보내려고합니다. 그게 가능하니? SIGUSR1을 사용하고 있습니다.리눅스에서 신호로 정보 보내기
물론 가능하지만 kill(2)
대신 sigqueue(2)
으로 보내야합니다. 그리고 int
또는 sival_ptr
을 보낼 수 있습니다. 정수
static void
handler(int sig, siginfo_t *si, void *ucontext)
{
si->si_value; /* This is what you're looking for. */
}
을 사용하여 설정
union sigval {
int sival_int;
void *sival_ptr;
};
핸들러
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO; /* Important. */
sigaction(SIGUSR1, &sa, NULL);
을위한 신호 처리기를 수립
union sigval sv; sv.sival_int = 42; sigqueue(pid, SIGUSR1, sv);
그런 훌륭한 해결책을 가져 주셔서 감사합니다 :)! – MetallicPriest
cnicutar가 말한 것처럼 가능하지만 의사 소통을위한 더 나은 채널을 찾아야합니다. 절대적으로 필요하지 않을 때 신호를 사용하는 것은 대개 디자인 측면에서 매우 나쁜 생각입니다. –