linux命令行界面中ctrl+c取消命令执行9问9答

2023-06-01 00:00:00 命令 命令行 界面

问题1:说说为啥按ctrl+c就停止了

答:

当在终端按下ctrl+c时,会产生一个中断信号(SIGINT),并且内核会发给前台进程组

1.jpg

问题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文件】


待续

相关文章