linux命令行界面中ctrl+c取消命令执行9问9答
问题1:说说为啥按ctrl+c就停止了
答:
当在终端按下ctrl+c时,会产生一个中断信号(SIGINT),并且内核会发给前台进程组
问题2:那你说一下是什么中断,什么是前台进程组
答:
中断就是一种异步事件,前台进程组 就是关联了终端的进程
问题3:那它为啥关联了终端,为啥叫前台,不叫后台
答:
因为bash程序启动之后,会打开伪终端主设备,
ptmax,并且会虚拟出 具有输入输出功能的 0,1,2文件,
同时在进程的fd目录可以证明,
在bash下面启动的进程会继承它的相关属性,
同时子进程就连接了终端,
在终端按下ctrl+c时,就会产生中断信号发给它的进程组
问题4:你上面的回答如何用实战证明呢
答:
用strace命令,
strace常用来跟踪进程执行时的系统调用和所接收的信号。
在Linux世界,进程不能直接访问硬件设备,
当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,
必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。
strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
strace命令实例
strace -o output.txt -T -tt -e trace=all -p 28979
上面命令的解释:
跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,
以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
问题5:那刚才说了ctrl+c程序就终止了,那它生产的中断信号是啥呢?
如何查看呢?
进程对中断信号都有啥行为呢?
答:
1.SIGINT信号。SIGINT(“程序中断”)是终止信号之一;
2.kill -l("l" 为字母),查看相应的信号;
3.执行系统默认动作,对大多数信号来说,系统默认动作是用来终止该进程。
问题6:中断信号的内核数据在哪里查看呢?
答:
中断号的查看可以使用下面的命令:
cat /proc/interrupts
问题7:如果是后台进程ctrl+c或是守护进程ctrl+c为什么不会影响到?
答:
因为前台进程 连接了
伪终端设备【具有输入输出的伪设备,可以从进程的fd目录下得到验证】
而守护进程它并没有输入输出【就是说它切断了0,1,2文件】
待续
相关文章