Linux的信号是一种用于进程之间通信的机制。它们用于向进程发送通知,告知进程发生了某种事件或请求进程执行某个操作。信号可以由内核、其他进程或进程自身发送。
信号的作用有以下几个方面:
- 通知进程某个事件的发生,如进程的终止、挂起、恢复等。
- 中断进程的执行,使其执行处理函数或终止。
- 在进程间进行简单的通信,如发送用户定义的信号。
kill命令用于向指定进程发送信号,其基本语法为kill [options] <PID>
,其中PID是进程的ID。常用的选项包括:
-l
:显示可用的信号列表。-s <signal>
:指定要发送的信号,默认为15(SIGTERM)。
killall命令用于根据进程名 ** 所有匹配的进程,其基本语法为killall [options] <process_name>
。常用的选项包括:
-l
:显示可用的信号列表。-s <signal>
:指定要发送的信号,默认为15(SIGTERM)。
信号的类型包括:
- 标准信号(Standard Signals):在POSIX标准中定义的信号,如SIGINT(中断)、SIGTERM(终止)等。
- 实时信号(Real-time Signals):提供更高精度的信号,如SIGRTMIN、SIGRTMAX等。
对于接收到的信号,进程可以选择不同的处理方式:
- 忽略(Ignore):进程不做任何处理。
- 终止(Terminate):进程立即终止。
- 默认(Default):按照默认方式处理信号,如终止进程或终止并生成核心转储文件。
- 自定义处理函数(Custom Handler):进程可以注册一个信号处理函数来处理接收到的信号。
进程可以使用signal()函数或sigaction()函数来设置信号处理方式。signal()函数是较旧的方式,而sigaction()函数提供了更多的控制选项。