2011-12-27 65 views
0

我正在开发一个将大量OS-9(微波)代码移植到linux的项目。移植OS-9信号处理程序

OS-9中的信号处理功能允许您创建自己的信号,或者至少它是如何实现的(intercept()函数)。我并不十分了解Linux信号,并且一直在努力教自己。我有一个sigusr1工作的sigaction路线,只是为了让自己熟悉。在传统的OS-9代码中,有10个用户定义的信号。什么是最好的方式来完成这个在Linux?

OS-9信号处理程序是一个带有大开关语句的函数。每个信号都对应(设置)一个全局变量,该变量在该进程代码中的其他位置执行。

感谢, 赛斯

回答

2

您需要SIGRTMIN和SIGRTMAX之间使用信号编号。 这是讨论的here

您发送信号杀死(如果你没有数据)或sigqueue(如果你有数据)。

您会收到sigaction的信号。查看sigaction的手册页以查找sigqueue的数据将存储在哪里。

+0

您也可以使用'sigqueue()'将不同的语义复用到'SIGUSR1'这样的信号上,通过使用提供的整数来区分它们。 – caf 2011-12-27 12:04:17

+0

谢谢,这似乎工作。但-1(表示整个群体的信号)看起来并不像kill这样工作,除非我有一些进程组设置错误。 – Seth 2011-12-28 17:29:30