接收参数:信号sig,数据结构siginfo_t中info的地址(或具体编码值,参考前面的specific_send_sig_info()描述,目标进程描述符地址t,挂起信号队列signals的地址。 函数执行如下内容: 如果info等于2,信号是SIGKILL或SIGSTOP且是内核通过force_sig_specific()函数产生的:这种情况直接跳转到第9步。与这些信号相对应的动作由内...
send_sig_info => do_send_sig_info => send_signal/*sig: 要发送的信号t: 信号要发送到哪个task...
知道了应用程序的PID,驱动程序就可以在中断发生的时候(按下键盘ESC键),发送信号出去了: static void send_signal(int sig_no) { struct siginfo info; ... send_sig_info(...); } static irqreturn_t myirq_handler(int irq, void * dev) { ... send_signal(SIGUSR1); } Makefile 文件 ifneq ($(...
知道了应用程序的 PID,驱动程序就可以在中断发生的时候(按下键盘ESC键),发送信号出去了: static void send_signal(int sig_no) { struct siginfo info; ... send_sig_info(...); } static irqreturn_t myirq_handler(int irq, void * dev) { ... send_signal(SIGU...
send_sig_info force_sig force_sig_info sys_tkill sys_tgkill 我们追踪send_sig这个函数,看信号生成的实现细节,它大概的调用流程如下图所示: 从系统调用 sys_kill 看用户空间向一个进程发送信号时,信号的产生过程: staticinlinevoidprepare_kill_siginfo(intsig, struct kernel_siginfo *info){ ...
info.si_code = SI_USER;//用户信号info.si_pid = current->pid;//进程号info.si_uid = current->uid;//uidreturnkill_something_info(sig, &info, pid); } /* * kill_something_info() interprets pid in interesting ways just like kill(2). ...
info.si_code =200;// 获取自己的任务信息,使用的是 RCU 锁rcu_read_lock(); my_task =pid_task(find_vpid(g_pid), PIDTYPE_PID);rcu_read_unlock();if(my_task ==NULL) {printk("get pid_task failed! \n");return; }// 发送信号ret =send_sig_info(sig_no, &info, my_task);if(ret ...
参数pid 指定要接收信号进程的ID,而参数 sig 是要发送的信号。 kill 系统调用最终会进入内核态,并且调用内核函数 sys_kill ,代码如下: asmlinkagelong sys_kill(intpid,intsig) { structsiginfoinfo; info.si_signo = sig; info.si_errno =0; info.si_code = SI_USER; ...
intdo_send_sig_info(intsig,structsiginfo*info,structtask_struct*p,boolgroup){unsignedlongflags;intret=-ESRCH;if(lock_task_sighand(p,&flags)){ret=send_signal(sig,info,p,group);unlock_task_sighand(p,&flags);}returnret;} 记住,group参数为true ...
继而,kill_something_info()既可以调用kill_proc_info()(通过group_send_sig_info()发送信号给单个线程组),也可以调用kill_pg_info()(扫描目标进程组所有进程并为每个进程调用send_sig_info()),还可以为系统中的每个进程重复调用group_send_sig_info()(pid=-1)。