在 Linux 里,“trigger” 这个词可能出现在不同场景中,常见的主要有三类。下面我按最容易混淆、也是面试/开发中常问的来分别说明原理。
在 Linux 内核中,trigger 通常指“某个条件满足后,触发一段内核逻辑执行”,例如:
trigger_once)trigger(如 LED、GPIO)核心思想:
事件源 → 触发条件 → 回调函数执行
raise_softirq(NET_RX_SOFTIRQ);
原理流程:
raise_softirq()✅ 本质:“标记 + 延迟执行”
echo heartbeat > /sys/class/leds/led0/trigger
原理:
led_trigger 链表struct led_trigger {
const char *name;
void (*activate)(struct led_classdev *led_cdev);
void (*deactivate)(struct led_classdev *led_cdev);
};
heartbeat 内部是一个定时器✅ 本质:回调 + 定时器
udevadm trigger
作用:
重新触发 uevent,让 udev 重新处理设备
原理:
/sys/devicesuevent 文件写入 add✅ 本质:用户空间 → 内核 → 用户空间 的事件重放
perf record -e sched:sched_switch
原理:
✅ 本质:静态探针触发
Linux 中的 trigger = 条件检测 + 回调执行
无论是:
都是:
事件发生 → 条件满足 → 触发逻辑执行
如果你指的是某一具体场景(例如:LED trigger、softirq trigger、GPIO trigger、eBPF trigger、systemd trigger),可以直接告诉我,我可以给你源码级讲解。