/* Find who killed me !? */ /* * Make me with: * touch Makefile ; make obj-m=trace-signal.o -C /lib/modules/`uname -r`/build M=`pwd` modules insmod ./trace-signal.ko */ #include #include #include /* events/0 - http://www.linuxjournal.com/article/6916 */ /* [ 54.726154] Process 'events/0' (10) kills with signal 3, task 1619 ('X') [ 54.726177] Pid: 10, comm: events/0 Tainted: G N 2.6.29.4-1-default #1 [ 54.726191] Call Trace: [ 54.726241] [] try_stack_unwind+0x51/0x11e [ 54.726276] [] dump_trace+0x55/0xca [ 54.726304] [] show_trace_log_lvl+0x33/0x3e [ 54.726328] [] show_trace+0x10/0x14 [ 54.726352] [] dump_stack+0x57/0x61 [ 54.726384] [] probe_signal_send+0x3f/0x44 [trace_signal] [ 54.726413] [] send_signal+0x2c/0x1ed [ 54.726437] [] __group_send_sig_info+0xa/0xc [ 54.726461] [] group_send_sig_info+0x3e/0x5c [ 54.726485] [] __kill_pgrp_info+0x3b/0x53 [ 54.726508] [] kill_pgrp+0x26/0x32 [ 54.726533] [] n_tty_receive_char+0x217/0x576 [ 54.726559] [] n_tty_receive_buf+0x1ff/0x455 [ 54.726584] [] flush_to_ldisc+0xf1/0x17f [ 54.726609] [] run_workqueue+0x99/0x12f [ 54.726634] [] worker_thread+0xb6/0xc2 [ 54.726657] [] kthread+0x3b/0x61 [ 54.726680] [] kernel_thread_helper+0x7/0x10 */ static void probe_signal_send(int sig, struct task_struct *t) { printk(KERN_INFO "Process '%s' (%u) kills with signal %u, task %u ('%s')\n", current->comm, (int)current->pid, sig, (int)t->pid, t->comm); if (sig == 3) dump_stack(); } int __init tp_signal_trace_init(void) { int ret; ret = register_trace_sched_signal_send(probe_signal_send); WARN_ON(ret); return 0; } module_init(tp_signal_trace_init); void __exit tp_signal_trace_exit(void) { unregister_trace_sched_signal_send(probe_signal_send); tracepoint_synchronize_unregister(); } module_exit(tp_signal_trace_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Michael Meeks"); MODULE_DESCRIPTION("Find who send me that signal");