我想知道有关信号的完整信息SIGTTIN
,例如我想知道SIGTTIN
信号是否可以处理。
这文档仅说明有关信号的以下内容SIGTTIN
:
SIGTTIN 21,21,26 停止后台进程的终端输入
并且man SIGTTIN
在终端中输入没有返回任何内容。
编辑:
我的意思不是可以向进程发送什么信号,而是接收信号的进程是否可以更改信号的默认操作。例如:SIGTTIN
信号的默认操作是停止进程,您可以使用该sigaction()
函数在程序中更改此默认操作。现在有些信号不允许您更改其默认操作,这就是我正在寻找的内容(有关哪些信号不允许您更改其默认操作的文档)。
答案1
您可以使用此命令,该命令通常是正确的。
kill -l | egrep SIGTTIN
您还可以编写一个快速 PERL 脚本来捕获 SIGTTIN + 然后在后台运行它 + 如果您的 SIGTTIN 处理程序运行,则输出一条简单的诊断消息。
答案2
我认为除了完全忽略信号或安装信号处理程序之外,您无法更改信号的默认操作。sigaction(2)
说:
sa_handler指定与signum关联的操作,并且可能是
SIG_DFL
默认操作,SIG_IGN
忽略此信号,或者指向信号处理函数的指针。该函数接收信号编号作为其唯一参数。
如果您想将某个信号的操作更改为其他默认操作之一,您可以引发另一个信号来执行您想要的操作(获取核心转储或停止进程),或者只是简单退出(终止进程) )。
SIGKILL
和SIGSTOP
是您无法捕捉或阻止的两个信号。sigaction(2)
:
签名指定信号,可以是除
SIGKILL
和之外的任何有效信号SIGSTOP
。
这些信号
SIGKILL
无法SIGSTOP
被捕获、阻止或忽略。
然而,忽略来自实际故障(无效的内存访问、无效的指令)的信号可能不会使进程处于非常稳定的状态。