2011-09-01 7 views
2

한 프로세스에서 다른 프로세스로 신호를 보낼 때 길이가 인 값을 보내려고합니다. 그게 가능하니? SIGUSR1을 사용하고 있습니다.리눅스에서 신호로 정보 보내기

+1

cnicutar가 말한 것처럼 가능하지만 의사 소통을위한 더 나은 채널을 찾아야합니다. 절대적으로 필요하지 않을 때 신호를 사용하는 것은 대개 디자인 측면에서 매우 나쁜 생각입니다. –

답변

5

물론 가능하지만 kill(2) 대신 sigqueue(2)으로 보내야합니다. 그리고 int 또는 sival_ptr을 보낼 수 있습니다. 정수

전송 SA_SIGINFO

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); 
+0

그런 훌륭한 해결책을 가져 주셔서 감사합니다 :)! – MetallicPriest

관련 문제