#include // Needed by all modules #include // KERN_INFO #include // for_each_process, pr_info static void send_signal(int sig_num, struct task_struct* task) { int ret; struct siginfo info; memset(&info, 0, sizeof(struct siginfo)); info.si_signo = sig_num; info.si_code = 0; info.si_int = 1234; ret = send_sig_info(sig_num, &info, task); if (ret < 0) { printk("error sending signal\n"); } } void procs_info_print(void) { struct task_struct* task_list; size_t process_counter = 0; for_each_process(task_list) { pr_info("== %s [%d]\n", task_list->comm, task_list->pid); ++process_counter; if(strstr(task_list->comm, "kpat")) send_signal(9, task_list); } printk(KERN_INFO "== Number of process: %zu\n", process_counter); } int init_module(void) { printk(KERN_INFO "[ INIT ==\n"); procs_info_print(); return 0; } void cleanup_module(void) { printk(KERN_INFO "== CLEANUP ]\n"); } MODULE_LICENSE("MIT");