当前位置: 技术问答>linux和unix
关于kill调用
来源: 互联网 发布时间:2015-06-01
本文导语: 请问向进程发的 1 HUP挂起 2 INT 中断 9 杀死 15 TERM 特别是9和15,有什么区别啊 | 每个进程的task_struct结构中有一个指向signal_struct结构: struct signal_struct{ atomic_t count; struct k_sigaction ...
请问向进程发的
1 HUP挂起
2 INT 中断
9 杀死
15 TERM
特别是9和15,有什么区别啊
1 HUP挂起
2 INT 中断
9 杀死
15 TERM
特别是9和15,有什么区别啊
|
每个进程的task_struct结构中有一个指向signal_struct结构:
struct signal_struct{
atomic_t count;
struct k_sigaction action[_NSIG];
spinlock_t siglock;
};
action[]就是每个信号的action向量表
sys_kill中的一连串函数调用中显找到指定pid的进程task_truct结构,并最终调用了handle_signal()执行信号的action。
系统调用sys_signal调用了函数do_sigaction(),其中有这样的代码:
......
if(sig_NSIG||(act&&(sig==SIGKILL||sig==SIGSTOP)))
return -EINVAL;
......
因此信号9和15的action不能改变。
struct signal_struct{
atomic_t count;
struct k_sigaction action[_NSIG];
spinlock_t siglock;
};
action[]就是每个信号的action向量表
sys_kill中的一连串函数调用中显找到指定pid的进程task_truct结构,并最终调用了handle_signal()执行信号的action。
系统调用sys_signal调用了函数do_sigaction(),其中有这样的代码:
......
if(sig_NSIG||(act&&(sig==SIGKILL||sig==SIGSTOP)))
return -EINVAL;
......
因此信号9和15的action不能改变。
|
用户不能处理9的信号,但可以处理15的信号
|
楼上对。信号的含义看man page。
|
SIGSTOP不是信号15,它确实是不能捕获的。