现在我们已经开始探索 Linux 系统下的信号一族了。Linux 信号作为 Unix 特定的实现机制,可以被应用程序或者是用户使用来与内核进行通信。可以根据每个信号名称和号码获取相应信号的详细描述。特别的,Linux 信号由操作系统发出,通知进程不要忽略或准备行动。
从概念上讲,Linux 信号是一组由内核提供的用于向进程发送通知的非常小的包裹(与邮局的纸张信封比较起来)。信号的有用之处在于:你可以根据每一条特定的信号类型触发指定的 action(比如终止、停止、忽略等), 通过发出一个信号,这些 action 会被进程(或者线程)执行。
一些常用的信号包括:SIGINT(终端中断/ Ctrl + C)、SIGQUIT(用户发起终止/Ctrl+\)、SIGHUP(挂起:用于终止并重新启动进程/服务)和 SIGKILL(强制终止)等。
我们可以使用 kill 系统调用函数来发送信号到进程:
//发送信号 SIGINT 到进程 PID 为 15121 的进程
kill(15121, SIGINT);
我们还可以使用一般的shell指令来发送信号,比如:killall -SIGQUIT myprogram (用于终止名为 myprogram 的进程), kill -SIGHUP myprogram (用于挂起 myprogram 进程)等。
Linux 提供了一些信号处理函数, 使我们可以通过处理特定信号收到的事件来实现某些操作,例如:
// 自定义的信号处理函数
void sig_handler(int signum)
{
// 可以根据不同的信号名称 signum,来执行不同的动作
}
int main()
{
// 处理 SIGINT 信号
signal(SIGINT, sig_handler);
}
因此,Solaris,Linux 和其他的 Unix 系统都使用信号,并且每个系统有不同的信号名称、号码和特性, 并且提供了多种机制,用于发送和处理信号。
总而言之,Linux 信号是操作系统内核向进程发送通知的机制,通过 Linux 内核提供的信号处理函数,我们可以在程序中进行不同的操作,处理收到的信号。