这个评论让我困惑:"kill -l通常列出所有信号".我认为信号意味着量子化的能量.
[已添加]请澄清Unix中的(计算)信号和物理信号.它们是完全不同的概念吗?
[已添加]范例之间是否存在重大差异?C,Python和Haskell等语言的含义是否相同?信号似乎是一个通用术语.
手册指的是一种非常基本的机制,允许进程或操作系统通过发送信号通知其他进程.操作系统可以使用它来通知程序关于它们的堕胎(信号SIGABRT
)或关于分段错误(通常由访问空指针引起SIGSEGV
),以命名它们中的两个.
一些unix服务器使用信号,因此管理员可以使用kill
它们向它们发送信号,使它们重新读取其配置文件,而不需要它们重新启动.
对某些信号采取默认操作,其他信号只是被忽略.例如,在接收到a时SIGSEGV
,程序终止,而接收a SIGCHLD
,意味着子进程死亡,默认情况下将没有任何特殊结果.
有一个ANSI C标准函数可以安装一个信号处理程序,它是一个可以在接收信号时执行某些代码的函数,称为signal
(读入man signal
).在不同的unix中,该函数表现不同,因此不鼓励使用它.它的manpage是指sigaction
函数(read man sigaction
),它表现一致,并且功能更强大.
我无法相信人们在某些方面没有比较硬件和软件等事情或者强调操作系统.
信号和中断之间的比较:
不同之处在于,虽然硬件将中断发送到操作系统,但是操作系统或其他进程将信号发送到进程.请注意,信号与软件中断无关,软件中断仍由硬件发送(在本例中为CPU本身).(资源)
定义
process =执行中的程序,根据下面的书
进一步阅读
比较信号与中断和异常
Tanenbaum的书"现代操作系统"
物理信号和Unix信号确实是不同的概念.当Unix信号从一个进程发送到另一个进程时,没有特定的相应物理信号.Unix信号仅仅是一种抽象,因此程序员可以讨论彼此通信的进程.
Unix信号可能被称为消息,事件,通知,甚至是像"frobs"这样的虚构术语.设计师只选择了"信号"这个名字,它就卡住了.
信号是目标进程或OS关于目标进程的消息.它是unix API的一部分(并在各种POSIX标准中定义).
阅读man kill
,man signal
和man sigaction
.
其他可能有用的SO问题:
sigaction和signal之间有什么区别?