linux shell ctrl+c 为啥可以退出进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell ctrl+c 为啥可以退出进程相关的知识,希望对你有一定的参考价值。
ctrl+c触发一个信号给进程,信号名为SIGINT (interrupt signal中断信号)你可以在shell里trap掉这个信号,再按ctrl+c就不会退出了。
trap 'echo \"no exit\"' 2追问
有命令可以不用ctrl+c退出的吗?比如"bash script", ./script 脚本可以用ctrl+C退出,进程被kill掉,但是script里面包含bash $0, bash 的进程为什么不可以ctrl+C kill掉?谢谢
追答没见过你说的这种情况,除非你看错了,你看到的bash有可能是和终端绑在一起的那个,而不是执行script的那个,例如,我执行一个脚本sx1:
17874 0.7 0.0 \_ xterm
17876 0.3 0.0 | \_ bash
18621 0.2 0.0 | \_ bash sx1
18624 0.0 0.0 | \_ sleep 1
18625 0.1 0.0 \_ /bin/ps axf -o pid %mem %cpu cmd
ctrl+c以后:
17874 0.7 0.0 \_ xterm
17876 0.3 0.0 | \_ bash
18666 0.1 0.0 \_ /bin/ps axf -o pid %mem %cpu cmd
很明显,bash sx1完全退出了.
需要使用 nohup命令使script后台运行,就不会出现这样的问题了。
使用方法如下:
在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。
nohup 示例
[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.com
root 3067 984 0 21:06 pts/3 00:00:00 grep 3059
[root@pvcent107 ~]#
使用jobs命令查看用户发起的后台任务
参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
Linux Shell 快捷键
常用
Ctrl+R:快速检索历史命令(Retrieve)
Ctrl+U:删除整个命令行文本字符(Unity)
Ctrl+S:暂停正在运行的程序 (Stop)
Ctrl+Q:退出暂停(Quit)
Ctrl+Z:使正在运行在终端的任务,运行于后台 (可用fg恢复)
Ctrl+C:中断终端中正在执行的任务(Complete)
Ctrl+D:在空命令行的情况下可以退出终端(Drop Out)
Ctrl+P :上一个使用的历史命令,相当于向上键 (Previous)
Ctrl+N:下一个使用的历史命令,相当于向下键(Next )
Ctrl+[ :相当于Esc键
Esc键:连续按3次显示所有的支持的终端命令
Tab键:命令、文件名等自动补全功能
移动光标
Ctrl+A : 光标定位于行首 (Ahead)
Ctrl+E : 光标定位于行尾 (End)
Ctrl+B:光标向行首移动一个字符(Backwards)
Ctrl+F:光标向行尾移动一个字符(Forwards)
删除字符
Ctrl+W: 删除光标处到行首的字符
Ctrl+K:删除光标处到行尾的字符
Ctrl+H:向行首删除一个字符
Ctrl+D:向行尾删除一个字符
Ctrl+Y:粘贴
Ctrl+T: 交换光标所在字符和其前的字符 (Turn to)
以上是关于linux shell ctrl+c 为啥可以退出进程的主要内容,如果未能解决你的问题,请参考以下文章