三者的区别
Ctrl+C :强制中断程序,程序无论运行哪里都停止。
Ctrl+D :发送一个 exit 的信号,退出当前的用户或者是客户端。
Ctrl+Z :暂停程序,在进程中维持挂起状态。
引用别人的说法:
1、Ctrl+C比较暴力,就是发送Terminal到当前的程序,比如你正在运行一个查找功能,文件正在查找中,Ctrl+C就会强制结束当前的这个进程。
2、Ctrl+Z 是把当前的程序挂起,暂停执行这个程序,比如你正在mysql终端中,需要出来搞点其他的文件操作,又不想退出mysql终端(因为下次还得输入用户名密码进入,挺麻烦),于是可以ctrl+z将mysql挂起,然后进行其他操作,然后输入 fg 回车后就可以回来,当然可以挂起好多进程到后台,然后 fg 加编号就能把挂起的进程返回到前台。当然,配合bg(后台)和fg命令进行前后台切换会非常方便。
3、Ctrl+D 是发送一个exit信号,没有那么强烈,类似ctrl+C的操作,比如你从管理员root退回到你的普通用户就可以这么用。
验证过程
先写这样一个php程序(demo.php):
<?php $number = 0; while(true){ file_put_contents('demo.log',$number.PHP_EOL,FILE_APPEND); $number++; sleep(1); }
在cli模式下,我们运行demo.php,并使用ctrl+z“掐断”程序,如下:
我们猜测,如果进程仅是挂起,那么使用fg(前台运行)或bg(后台运行)命令(使用fg或bg命令前,可以先执行jobs命令,查看后台运行的进程),是可以继续将进程唤起执行的,我们使用fg测试效果如下:
从上面的效果图表象来看,demo.php又可以继续执行,使用ctrl+z操作,仅是将进程挂起,进程未终止,仍可以唤起执行。读者也可以通过观察demo.log(tail -f demo.log)这个文件在整个过程中数字的变化,更加真切地感受验证结果。
同样,我们使用ctrl+c操作,得到下面的结果图:
从上图可以看出,ctrl+c操作后的进程,是彻底地被杀死了,读者也可以看demo.log里的内容变化(ctrl+c操作后,demo.log里的内容不再增加)
参考链接
https://blog.csdn.net/llwan/article/details/50325185
http://www.thanks.live/index.php/posts/ctrl-z-c