当前位置: 技术问答>linux和unix
kill -9 pid 我怎么获得它的信号??
来源: 互联网 发布时间:2016-03-31
本文导语: signal( ) 怎么获得kill -9 pid的信号.. 就是在我执行kill的时候怎么得到他信号. 能给个小例子万分感谢... | 呵呵,楼上不是很多专家都回答了吗?fierygnu可是很厉害的。 不要考虑kill -9的事...
signal( )
怎么获得kill -9 pid的信号..
就是在我执行kill的时候怎么得到他信号.
能给个小例子万分感谢...
怎么获得kill -9 pid的信号..
就是在我执行kill的时候怎么得到他信号.
能给个小例子万分感谢...
|
呵呵,楼上不是很多专家都回答了吗?fierygnu可是很厉害的。
不要考虑kill -9的事,如果真有人这么做,那你也没办法,因为这样做本身就是非常规的。
一般的kill不带-9参数,或者带SIGTERM参数:
kill -TERM xxx
这样的kill实际上就是给进程发信号,这些信号是可以捕捉的(SIGTERM,SIGINT,...)
kill -l (小写的L)可以列出所有的信号,可以看到
kill -9等价于kill -GKILL
而kill -TERM 就是kill -15
通常程序需要捕捉的信号有
- SIGTERM:正常退出,清理数据
- SIGHUP,并不退出,通常用来重新装载配置文件,进行某些初始化
- SIGINT,处理Ctrl-C
- SIGCHLD,子进程退出
如前所述,SIGKILL和SIGSTOP无需捕捉,也无法捕捉,他们是用来保证系统有办法强制杀掉异常的进程。
当然如果你的程序一定要强调不能被杀掉(实际上没有程序会这样做,除了一些内核的进程),你只能修改内核了。
(注:SIGSTOP是19而非15)
不要考虑kill -9的事,如果真有人这么做,那你也没办法,因为这样做本身就是非常规的。
一般的kill不带-9参数,或者带SIGTERM参数:
kill -TERM xxx
这样的kill实际上就是给进程发信号,这些信号是可以捕捉的(SIGTERM,SIGINT,...)
kill -l (小写的L)可以列出所有的信号,可以看到
kill -9等价于kill -GKILL
而kill -TERM 就是kill -15
通常程序需要捕捉的信号有
- SIGTERM:正常退出,清理数据
- SIGHUP,并不退出,通常用来重新装载配置文件,进行某些初始化
- SIGINT,处理Ctrl-C
- SIGCHLD,子进程退出
如前所述,SIGKILL和SIGSTOP无需捕捉,也无法捕捉,他们是用来保证系统有办法强制杀掉异常的进程。
当然如果你的程序一定要强调不能被杀掉(实际上没有程序会这样做,除了一些内核的进程),你只能修改内核了。
(注:SIGSTOP是19而非15)
|
#include
int main(int argc, char **argv)
{
...
signal(SIGKILL, sig_handler);
...
}
void sig_handler(int signum)
{
...
}
|
kill -9发送的是SIGKILL信号,该信号无法捕捉。
|
//faint
不是雨想哭,是我想哭。。。
说了这么多遍了,还不清楚吗?
再怎么多谢我也没办法。。。
不是雨想哭,是我想哭。。。
说了这么多遍了,还不清楚吗?
再怎么多谢我也没办法。。。
|
不允许用户捕获SIGKILL信号的原因其实很简单:如果允许捕获的话就能创建出一个杀不死的进程。
|
找到了。在signal系统调用的时候有判断,确实不能通过signal系统调用来屏蔽SIGKILL与SIGSTOP信号。
int
do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact)
{
struct k_sigaction *k;
if (sig _NSIG ||
(act && (sig == SIGKILL || sig == SIGSTOP)))
return -EINVAL;
.....
}
看是否有其他途径吧。
|
SIGKILL和SIGSTOP都不能被捕获
即9 15
即9 15