linux 信号跟踪模块

linux 信号跟踪模块

如果进程因为接收到信号被杀死,一般使用 gdb 可以捕捉到是什么信号。但是 gdb 却无法得知信号是谁发出的。
这个时候,使用以下的 linux 信号跟踪模块,就可以在 dmesg 中,打印出是谁发送的信号。

以下的代码。是在linux下信号跟踪:jprobe_signal的基础上修改过来的。

其中添加了 name 参数,按照进程名称,过滤出信号接收进程。

name 参数: 指定信号接收进程的名称。默认是打印所有进程。
pid 参数: 指定信号接收进程的 pid。默认是打印所有进程。
signal 参数: 指定信号。默认是打印所有信号。

代码实现

signal_probe模块代码signal_probe.c如下:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>
#include <linux/sched.h>
#include <linux/string.h>

#define ANY_PID							(-1)
#define ANY_SIGNAL						(0)
#define IS_MATCH_ANY_PID(pid)			((pid) <= ANY_PID)
#define IS_MATCH_ANY_SIGNAL(signal)		((signal) <= ANY_SIGNAL)
#define IS_MATCH_ANY_NAME(name)			('\0' == name[0])

/* parameters of module */
static int g_pid = ANY_PID;
module_param_named(pid, g_pid, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(pid
		, "The specified PID of receiver, -1 Reprensent any process. \
		0 Represent no processes be traced. default is any process.");

static int g_signal = ANY_SIGNAL;
module_param_named(signal, g_signal, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(signal
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值