什么是Unix的信号?

这个评论混淆了我:“kill -l通常列出所有的信号”。 我认为信号意味着量化的能量。

[添加]请说明Unix中的(计算)信号和物理信号。 他们是完全不同的概念吗?

[新增]范式之间有很大的区别吗? C,Python和Haskell等语言的含义是否相同? 信号似乎是一个通用的术语。

我无法相信人们不会比较硬件和软件之类的东西,或者在某些方面强调操作系统

信号和中断之间的比较

不同之处在于,当硬件将中断发送到操作系统时, 操作系统或其他进程将信号发送到进程。 请注意,信号与软件中断无关,软件中断仍然由硬件 (CPU本身,在这种情况下)发送。 (资源)

定义

  1. 过程=正在执行的程序,根据下面的书

进一步阅读

  1. 将信号与中断和异常进行比较

  2. 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 killman signalman sigaction

其他SO可能有帮助的问题:

  • sigaction和signal有什么区别?

一些从我的笔记:

允许异步通信

  • 属于同一用户的进程之间
  • 从系统到任何进程
  • 从系统管理器到任何进程
  • 所有相关的信息都在信号本身
  • 许多不同的信号

SIGINT

  • 从系统到与终端关联的所有进程
  • 触发:^ C按下
  • 通常的方法来停止正在运行的进程

SIGFPE

  • 从内核到单个进程
  • 触发器:浮点操作错误

SIGKILL

  • 到一个单一的过程
  • 停止目标进程的执行

SIGALRM

  • 从内核到单个进程
  • 触发器:定时器到期

SIGTERM

  • 到一个单一的过程
  • 建议进程优雅地终止

SIGUSR1,SIGUSR2

  • 从任何过程到其他任何过程
  • 没有预定义的语义
  • 程序员可以自由使用

发送信号到另一个进程

  • int kill(pid,signal_ID)

程序员可以决定接收到信号后该怎么做

  • 使用默认行为
  • 忽略它
  • 执行用户功能

检测中断的写入

 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来发送信号给自己。

信号的主要用途:

  1. 处理中断。

  2. 进程同步。