2011-12-27 5 views
0

전 OS-9 (마이크로 소프트) 코드를 리눅스로 포팅하는 프로젝트를 진행 중입니다.이식 OS-9 신호 처리기

OS-9의 신호 처리 기능을 통해 자신의 신호를 만들거나 적어도 구현 한 방법 (intercept() 기능)을 만들 수 있습니다. 나는 리눅스 신호에 대해 많이 알지 못하고 내가 따라갈 때 자신을 가르치려고 노력해왔다. sigusr1이 sigaction 루트를 가지고있어 익숙해지기 위해 노력하고 있습니다. 레거시 OS-9 코드에는 10 개의 사용자 정의 신호가 있습니다. 리눅스에서 이것을 달성하는 가장 좋은 방법은 무엇입니까?

OS-9 신호 처리기는 큰 switch 문을 사용하는 함수입니다. 각 신호는 해당 프로세스 코드의 다른 어딘가에서 작동하는 전역 변수에 해당합니다 (설정).

덕분에, 세스

답변

2

당신은 SIGRTMIN과 SIGRTMAX 사이에 신호 번호를 사용해야합니다. 이것은 논의되었습니다 here

당신은 kill (데이터가없는 경우) 또는 sigqueue (데이터가있는 경우)로 신호를 보냅니다.

신호가 sigaction으로 수신되었습니다. sigaction의 매뉴얼 페이지를보고 sigqueue의 데이터가 저장 될 곳을 찾으십시오.

+0

또한'sigqueue()'를 사용하여 제공된 의미의 정수를 사용하여 'SIGUSR1'과 같은 하나의 신호에 다른 의미를 멀티플렉싱 할 수 있습니다. – caf

+0

고마워, 그게 효과가있는 것 같다. 하지만 프로세스 그룹을 잘못 설정하지 않으면 -1 (전체 그룹에 신호를 보내십시오)이 kill과 같은 방식으로 작동하지 않는 것 같습니다. – Seth

관련 문제