linux内核定义的信号,Linux内核中的信号机制——信号发送

/*

*  Send a signal to only one task, even if it's a CLONE_THREAD task.

*/

asmlinkage long

sys_tkill(int pid, int sig)

{

struct siginfo info;

int error;

struct task_struct *p;

/* This is only valid for single tasks */

if (pid <= 0)//对参数pid进行检查

return -EINVAL;

info.si_signo = sig; //根据参数初始化一个siginfo结构

info.si_errno = 0;

info.si_code = SI_TKILL;

info.si_pid = current->tgid;

info.si_uid = current->uid;

read_lock(&tasklist_lock);

p = find_task_by_pid(pid);//获取由pid指定的线程的task_struct结构

error = -ESRCH;

if (p) {

error = check_kill_permission(sig, &info, p);//权限检查

/*

* The null signal is a permissions and process existence

* probe.  No signal is actually delivered.

*/

if (!error && sig && p->sighand) {

spin_lock_irq(&p->sighand->siglock);

handle_stop_signal(sig, p);

//对某些特殊信号进程处理,例如当收到SIGSTOP时,需要把信号队列中的SIGCONT全部删除

error = specific_send_sig_info(sig, &info, p);//把信号加入到信号队列

spin_unlock_irq(&p->sighand->siglock);

}

}

read_unlock(&tasklist_lock);

return error;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值