这是MIT Missing Semester系列的第五讲,主要关于shell下对于进程(Process)的控制。
Job Control
Kill Process
最简单的,要想结束当前正在进行的进程,使用Ctrl+c即可。而实际上,这是通过向其发送了SIGINT(INT是interrupt的意思)的信号量实现的。例如,执行如下脚本时候,如果按下Ctrl+c,并不会退出,而只是会执行handler函数。更多信号量的文档可以参考man signal。
1 | #!/usr/bin/env python |
休眠 (suspend)
使用Ctrl-z发送SIGSTOP信号可以使得进程暂时休眠,并可以后续继续运行。我们可以用下面的代码做实验。在Ctrl+z后,程序暂时休眠停止运行,计数器的值也不再更新,直到使用fg命令,才重新开始。
1 | # 每隔1s打印当前计数器的值 |

除了fg以外,还可以使用bg来开始被休眠的进程。只不过bg会让重新开始的进程在后台运行。
这里直接贴出讲师的一个例子:

需要注意的是:
bg的使用:将进程状态从suspending转到runningjobs可以列出当前所有未完成的进程- 可以使用
%number的形式引用jobs列出的进程 - 除了快捷键,也可以使用
kill向指定进程发送信号量,具体可以参考man kill
SSH
远程ssh到开发机是常见的操作,这里有一些比较零散的知识点记录。
- 使用
ssh-copy-id $host_name将当前机器的ssh public key拷贝到给定的远程host机器(之前我都是通过手动copy) - 将文件拷贝到远程机器的N种方法:
- 使用
ssh + tee:cat local_file | ssh remote_server tee server_file,这是利用了ssh remote_server可以后接shell命令 - 使用
scp,这也是我最常用的命令了 - 使用
rsync,更强大的scp,可以跳过重复文件等
- 使用
- 端口转发,例如在远程服务器的
8888端口启动了jupyter notebook,可以使用ssh -L 9999:localhost:8888 foobar@remote_server将其转发到本机的9999端口,这样在本机浏览localhost:9999即可访问笔记本


Exercise
创建alias
1 | alias dc="cd" |