这是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" |