【Mac】Mac上终端执行Control-C/Control-D/Control-Z的区别
利用air
实现Go程序的实时热更新,在键入air
命令后,无意之间按下了ctrl+Z
,发现程序好像从终端退出了,但是air
的临时文件tmp
没有被删除,通过活动监视器
也发现进程仍然存活,这是为什么呢?
1.引言
macOS 底层是Darwin ,而这是一种Unix-like的操作系统。在这样的类 Unix 系统中,在前台运行一个长时间的任务的时候,用户就会失去对shell的控制权。这时可以通过 Control-C、Control-D、Control-Z 这几个命令重新拿回 Shell 控制权。但是它们是有差别的。
2.Control-C
中止当前任务,进程被 Kill 掉。
3.Control-D
对于需要从 stdin
输入的应用,如:cat
、md5
,当完成输入的内容之后,使用 Control-D
输入 EOF
标记。
4.Control-Z
将当前任务挂起,放到后台。是吧,只是挂起了,并没有退出。当任务被挂起后,可以在当前终端使用:
jobs
[1] + suspended air
查看当前shell中所有**挂起(suspended)与后台运行(running)**任务。
4.1 bg命令
挂起→后台运行
bg
命令,后面跟 %n
,n 是 jobs
命令返回内容的 Job
列的数字。
bg %1
[1] + continued air
jobs
[1] + running air
4.2 fg命令
进入挂起或者后台运行的进程
fg
命令,后面跟 %n
,n 是同样是 jobs
命令返回内容的 Job
列的数字。
fg %1
[1] + running air
这时执行ctrl+C
^C
就会杀死这个挂起或者后台运行的进程。
4.3 kill命令
接上
kill %1
- 如果进程是挂起的:
- 第一次执行,挂起的进程会变成后台运行
- 再执行一次命令,才会kill杀掉进程
- 如果进程已然是后台运行:则会直接kill杀掉进程
- 原文作者:Garfield
- 原文链接:http://www.randyfield.cn/post/2021-06-21-mac-terminal/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。