Chinaunix
标题:
SIGKILL 和 SIGSTOP 信号不能被捕捉的问题?
[打印本页]
作者:
老爷康
时间:
2016-07-18 09:41
标题:
SIGKILL 和 SIGSTOP 信号不能被捕捉的问题?
环境:linux
现在有一个需求,我程序启动后,为了防止用户误输入ctrl+D/C 而把任务给挂掉,想忽略或者捕捉这个信号,当然,ctrl+c发送中断信号,可以被忽略,但是
类似于SIGKILL 和 SIGSTOP 信号不能被捕捉也不能被捕获我该怎么办,我想禁用掉他们,求解决
作者:
老爷康
时间:
2016-07-18 09:42
打字错误。不是D,是Z
lol
作者:
cokeboL
时间:
2016-07-18 10:53
别逗,如果这俩都能捕捉了,恶意程序你就杀不掉了。
作者:
cokeboL
时间:
2016-07-18 10:55
程序员最大的错误之一就是,什么问题都想用技术解决,有时候是需求有问题,技术是解决不了的。
作者:
老爷康
时间:
2016-07-18 11:04
回复
4#
cokeboL
那我说的简单点吧,现在要基于linux的原有shell 用python实现一个命令台,不想用户ctrl+Z 给退出,也就是用户只能看到我提供的命令台,看不到原有的shell 怎么办
我们使用的bash,你按下ctrl+D 不是也不会退出吗,
作者:
cokeboL
时间:
2016-07-18 11:09
回复
5#
老爷康
程序员最大的错误之一就是,什么问题都想用技术解决,有时候是需求有问题,技术是解决不了的。
这句能看懂不。。
作者:
gaojl0728
时间:
2016-07-18 11:51
linux 内核设计就是这两个信号不能被捕获
作者:
nswcfd
时间:
2016-07-18 14:21
在bash里同样可以通过kill命令把自己杀掉的,只要python console不给用户提供执行kill的机会不就没事了?
“我们使用的bash,你按下ctrl+D 不是也不会退出吗,”
应该会退出吧?^D
作者:
老爷康
时间:
2016-07-18 14:39
自己解决一下自己的问题:
问题描述:要在python程序中防止用户退出 经过多方查找和实践,发现是自己的问题 ^C ^Z ^\ 这三个都会导致退出,但是我们需要知道他们触发的信号
和那两个不可忽略的信号并没有关系,是我自己提出的问题 有毛病
, 分别是 SIGTSTP SIGINT SIGQUIT 只需要调用python的signal库,对这三个
信号 屏蔽即可
import signal
signal.signal(signal.SIGINT,signal.SIG_IGN).其他两个类似,即可!!!
作者:
seanking1987
时间:
2016-07-18 15:54
大家都被带到信号9的坑里了。。
作者:
MMMIX
时间:
2016-07-18 19:37
回复
5#
老爷康
你选错方法实现这个需求了。
作者:
MMMIX
时间:
2016-07-18 19:39
seanking1987 发表于 2016-07-18 15:54
大家都被带到信号9的坑里了。。
确实,这就是个标准的x-y问题。
作者:
windoze
时间:
2016-07-18 23:22
给你几个方案:
1、写个内核模块,禁掉指定进程的SIGSTOP和SIGKILL,还别说,很多恶意软件就是这么干的。
2、给系统换个root密码,然后用root权限启动你的程序,这样所有其它用户就没权限给你的进程发信号了
3、干掉产品经理,把现场伪装成事故,如此反复直到换上一个不会提这种傻逼需求的产品经理。
作者:
cjfeii
时间:
2016-07-21 18:04
static void stop(int sig)
{
switch(sig) {
case SIGTERM: /* kill. */
printf("receive signal: SIGTERM");
break;
case SIGINT: /* Ctrl-C. */
printf("receive signal: SIGINT");
break;
case SIGUSR1: /* user defined signal. */
printf("receive signal: SIGUSR1");
break;
default: /* -1: unexpected. */
printf("receive signal: unexpected signal");
break;
}
}
static void reg_signals()
{
signal(SIGINT, stop); // Ctrl-C
signal(SIGTERM, stop); // kill
signal(SIGUSR1, stop); // user defined signal.
}
复制代码
可以用上面的方式捕捉对应的signal
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2