这个评论让我感到困惑:“kill -l 通常列出所有信号”。我认为信号意味着量化的能量。
[已添加]请澄清 Unix 中的(计算)信号和物理信号。它们是完全不同的概念吗?
[添加]范式之间是否存在重大差异?在 C、Python 和 Haskell 等语言中的含义是否相同?信号似乎是一个通用术语。
这个评论让我感到困惑:“kill -l 通常列出所有信号”。我认为信号意味着量化的能量。
[已添加]请澄清 Unix 中的(计算)信号和物理信号。它们是完全不同的概念吗?
[添加]范式之间是否存在重大差异?在 C、Python 和 Haskell 等语言中的含义是否相同?信号似乎是一个通用术语。
该手册是指一种非常基本的机制,它允许进程或操作系统通过发送信号来通知其他进程。操作系统可以使用它来通知程序关于它们的中止(信号SIGABRT
)或分段错误(通常由访问空指针引起SIGSEGV
),举出其中两个。
一些 unix 服务器使用信号,因此管理员可以使用kill
向它们发送信号,导致它们重新读取其配置文件,而无需重新启动它们。
对某些信号采取了默认操作,而其他信号则被忽略。例如,在接收 aSIGSEGV
时,程序终止,而在接收 aSIGCHLD
时,意味着子进程死亡,默认情况下不会产生什么特别的结果。
有一个 ANSI C 标准函数,它安装了一个信号处理程序,它是一个在接收到信号时可以执行一些代码的函数,称为signal
(read in man signal
)。在不同的 unix 中,该函数的行为不同,因此不鼓励使用它。它的手册页引用了sigaction
函数(read man sigaction
),它的行为一致,也更强大。
物理信号和 Unix 信号确实是不同的概念。当一个 Unix 信号从一个进程发送到另一个进程时,没有特定的对应物理信号。Unix 信号只是一种抽象,因此程序员可以谈论进程之间的通信。
Unix 信号可以被称为消息、事件、通知,甚至是像“frobs”这样的虚构术语。设计师只是选择了“信号”这个名字,然后就卡住了。
信号是给目标进程或给操作系统的关于目标进程的消息。它是 unix API 的一部分(并在各种 POSIX 标准中定义)。
阅读man kill
、man signal
和man sigaction
。
其他可能有用的 SO 问题:
我的一些笔记:
允许异步通信
信号情报
SIGFPE
杀戮
SIGALRM
SIGTERM
SIGUSR1、SIGUSR2
向另一个进程发送信号
程序员可以决定收到信号时要做什么
检测中断的写入
if (write(fd, buff, SIZE)<0) {
switch (errno) {
case EINTR:
warning(“Interrupted write\n”);
break;
}
}…
信号是可以发送到正在运行的进程的消息。
例如,要告诉 Internet 守护程序 (inetd) 重新读取其配置文件,它应该发送一个 SIGHUP 信号。
例如,如果 inetd 的当前进程 ID (PID) 是 1234,您可以键入:kill -SIGHUP 1234
信号是“在计算过程之间传输的事件、消息或数据结构”(来自Wikipedia)。
在这种情况下,信号意味着“消息”。因此,它向一个进程发送一条消息,该消息可以告诉该进程做各种事情。
unix 信号是一种可以在 unix 进程之间发送和发送的消息。他们可以做一些事情,比如告诉一个进程退出(SIGKILL),或者一个进程有一个无效的内存引用(SIGSEGV),或者这个进程被用户点击 control-c(SIGINT)杀死。
从 *nix 命令行输入:
人信号
这将你所有可用的信号。
信号基本上是一个中断,它告诉进程某个特定事件已经发生。
信号一般由内核发送,同时一个进程也可以使用 kill 和 killall 命令将信号发送给其他进程(取决于权限和 all ),进程可以使用 raise 向自己发送信号。
信号的主要用途:
处理中断。
进程同步。
信号是一个中断,用于提示某个进程已经发生了特定事件。
信号可以由内核发送到正在运行的进程或一个进程到另一个进程。
在 bash 中使用 kill 和 killall 命令发送信号。