시그널을 보낼때 sleep을 해야 합니까?

superb86의 이미지

안녕하세요

시스템 프로그래밍책을 보면서 공부를 하고 있습니다...

그런데 시그널 을 보내는 함수가 kill()함수를 사용합니다.

kill(pid, SIGUSR1); 이렇게 사용을 합니다.

앞에 sleep()을 써야 제대로 동작을 합니다...

예제도 sleep(1); 나오고 다음에 kill()함수를 사용하여 제대로 결과를 얻는데
sleep()함수를 빼면 제대로 결과가 안나오네요...

답변 부탁드립니다... 왜그런것인지..잘 모르겠네요..

pynoos의 이미지

테스트하신 소스를 올려 주시지요...^^

shkwon81의 이미지

그렇게 동작할 리는 없습니다.

sleep(1);
kill(...);

sleep() 하는 동안 시그널을 받는 프로세스가 SIGUSR1에 대한 핸들러를
지정했겠지요..

sleep()을 쓰지 않은 경우에는 잘 동작하지 않는다고 하셨는데,

시그널을 받는 프로세스에서 시그널 액션을 변경하는 함수
(signal, sigaction 등)를 호출하는 시점이 위 프로그램에서 kill 하는
시점보다 먼저인지 확실히 검사해 보세요.