当前位置: 技术问答>linux和unix
关于trap命令的问题
来源: 互联网 发布时间:2016-08-05
本文导语: 我的理解:trap应该是说在接受到信号的时候执行指定的指令,比如在接受到exit指令时打印点东西 trap "echo something;exit" 0 然后这个exit的默认行为(也就是退出)是取消了 但是为什么 trap "echo something" 0 我退出终端...
我的理解:trap应该是说在接受到信号的时候执行指定的指令,比如在接受到exit指令时打印点东西
trap "echo something;exit" 0
然后这个exit的默认行为(也就是退出)是取消了
但是为什么
trap "echo something" 0
我退出终端的时候他直接就退出了,而不是输出something然后继续存在?
trap "echo something;exit" 0
然后这个exit的默认行为(也就是退出)是取消了
但是为什么
trap "echo something" 0
我退出终端的时候他直接就退出了,而不是输出something然后继续存在?
|
的确
trap命令就是在捕捉到指定信号之后,执行指定的指令。
trap "echo something" 0
LZ这里,指定捕捉退出信号,而且是命令执行成功后的退出信号。
你把这句放到一个脚本中去。他确实是捕捉到了退出信号然后打印信息。
不知道LZ所谓的退出终端是什么意思
|
恩。
CTRL+D 这个信号其实被捕捉到了的。
但是,在你的trap被捕捉之前,已经被系统捕捉到了,而且这个有点特殊。
其他的信号,你可以试试 CTRL+这样的信号,这种信号同样也是被系统和你的trap捕捉到了
而且都做了相应的动作。
其实信号究竟有没有被别人捕捉不影响trap的。
就像,军官口令:立正。所有的人都听讲了,并且做出了反应。
但是 CRTL+D这信号时最特殊的。系统捕捉到了信号就把shell终端退出了。
即使你的trap也捕捉到了。但是,他也会试图去打印动作,
但是系统捕捉到了CTRL+D抢先就把shell终端给关闭了,你的trap就无法处理动作了。
|
你这里最大 争议无非就是终端不能被保留。
其余的都能正确执行。
主要是一个系统试图去关闭终端,但是你的trap试图去保留终端,但是,你的trap没有系统的权限级别高,最终还是被系统关闭了shell终端。
其余的都能正确执行。
主要是一个系统试图去关闭终端,但是你的trap试图去保留终端,但是,你的trap没有系统的权限级别高,最终还是被系统关闭了shell终端。
|
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程 常用于终止正在运行的程序
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程 常用于挂起一个进程
ctrl-d 不是发送信号 而是表示一个特殊的二进制值 表示EOF
ctrl- 发送 SIGQUIT 信号给前台进程组中的所有进程 终止前台进程并生成 core 文件
Ctrl-s 停止向终端输出 暂停该终端(某些人误按的人以为死机了)
Ctrl-q 恢复向终端输出
Ctrl-l 清屏
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程 常用于挂起一个进程
ctrl-d 不是发送信号 而是表示一个特殊的二进制值 表示EOF
ctrl- 发送 SIGQUIT 信号给前台进程组中的所有进程 终止前台进程并生成 core 文件
Ctrl-s 停止向终端输出 暂停该终端(某些人误按的人以为死机了)
Ctrl-q 恢复向终端输出
Ctrl-l 清屏