这个评论混淆了我:“kill -l通常列出所有的信号”。 我认为信号意味着量化的能量。
[添加]请说明Unix中的(计算)信号和物理信号。 他们是完全不同的概念吗?
[新增]范式之间有很大的区别吗? C,Python和Haskell等语言的含义是否相同? 信号似乎是一个通用的术语。
我无法相信人们不会比较硬件和软件之类的东西,或者在某些方面强调操作系统 。
信号和中断之间的比较 :
不同之处在于,当硬件将中断发送到操作系统时, 操作系统或其他进程将信号发送到进程。 请注意,信号与软件中断无关,软件中断仍然由硬件 (CPU本身,在这种情况下)发送。 (资源)
定义
进一步阅读
将信号与中断和异常进行比较
Tanenbaum的书“现代操作系统”(Modern Operating Systems)
手册指的是一个非常基本的机制,它允许进程或操作系统通过发送信号来通知其他进程。 操作系统可以使用它来通知有关它们的流产(信号SIGABRT
)的程序或关于分段错误(通常由访问空指针SIGSEGV
)来命名其中的两个。
一些unix服务器使用信号,所以管理员可以使用kill
来发送信号,使他们重新读取配置文件,而不需要重启。
对某些信号采取了默认的动作,而其他信号则被忽略。 例如,在接收到一个SIGSEGV
,程序终止,而接收到一个SIGCHLD
,意味着一个子进程死了,默认情况下不会导致任何特殊的结果。
有一个ANSI C标准功能,安装一个信号处理程序,这是一个功能,可以执行一些代码,当接收到一个信号,被称为signal
(读入man signal
)。 在不同的unix中,这个函数的行为是不同的,所以它的用法是不鼓励的。 它的manpage指的是sigaction
函数(read man sigaction
),它的行为是一致的,而且更强大。
物理信号和Unix信号确实是不同的概念。 当Unix信号从一个进程发送到另一个进程时,没有特定的对应的物理信号。 Unix信号仅仅是一种抽象,所以程序员可以谈论进程之间的通信。
Unix信号可能被称为消息,事件,通知,甚至像“frobs”这样的虚构的术语。 设计者只是选择了“信号”这个名字,而且卡住了。
信号是一个消息,无论是对目标进程,还是有关目标进程的操作系统。 它是unix API的一部分(在各种POSIX标准中定义)。
阅读man kill
, man signal
和man sigaction
。
其他SO可能有帮助的问题:
一些从我的笔记:
允许异步通信
SIGINT
SIGFPE
SIGKILL
SIGALRM
SIGTERM
SIGUSR1,SIGUSR2
发送信号到另一个进程
程序员可以决定接收到信号后该怎么做
检测中断的写入
if (write(fd, buff, SIZE)<0) { switch (errno) { case EINTR: warning(“Interrupted write\n”); break; } }…
信号是可以发送到正在运行的进程的消息。
例如,要通知Internet Daemon(inetd)重新读取其配置文件,应该发送一个SIGHUP信号。
例如,如果inetd的当前进程ID(PID)是1234,那么键入:kill -SIGHUP 1234
信号是“在计算过程之间传输的事件,消息或数据结构”(来自Wikipedia )。
在这种情况下,信号意味着“消息”。 所以它会发送一个消息给一个可以告诉进程做各种事情的进程。
unix信号是一种可以发送到unix进程和从unix进程发送的消息。 他们可以做一些事情,比如告诉一个进程退出(SIGKILL),或者一个进程有一个无效的内存引用(SIGSEGV),或者进程被用户击中了control-c(SIGINT)。
从* nix命令行输入:
人的信号
那将会给你所有的信号。
信号基本上是一个中断,告诉过程发生了一个特定的事件。
信号一般由内核发送,同时一个进程也可以通过使用kill和killall命令将信号发送到其他进程(取决于所有的权限),一个进程可以使用raise来发送信号给自己。
信号的主要用途:
处理中断。
进程同步。