昨晚,几位“车神”引爆了世一大学子的朋友圈。
看到边骑车边跑代码的仁兄,
小协目测他是在电脑里用Linux虚拟环境跑程序,
因为合盖后电脑休眠就会自动结束运行,
所以不得不一边打开电脑一边在学堂路骑车。
小协作为一个程序员,不自觉地鼻头一酸,这不就是曾经的我吗?
“爬虫爬,我也爬;程序跑,我也跑。”
那么到底如何优雅地在学堂路上跑代码呢?
合了盖也要跑程序的四样写法,请查收!
00
甩锅给其他人,让别人边骑车边跑程序
void 组长布置任务() { try { 布置给组员(); } catch (Exception e) { 自己来做(); }}void 布置给组员() { throw new Error();}
01
购买“提升生活品质”的好物
02
在本地设置电脑合盖不休眠
Windows(以win10为例)
可以在“设置-电脑和睡眠-选择关闭笔记本计算机的功能”中设置合盖不休眠。
Linux(以Ubuntu为例)
可以在终端输入指令开启“合盖不休眠”;
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
同样的,也可以输入指令关闭“合盖不休眠”。
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
值得一提的是,对于上文中出现的windows中跑ubuntu虚拟机的情况,应该设置windows的合盖不休眠,因为虚拟机本质是跑在windows下的一个进程。
macOS
可以使用软件NoSleep(可以在App Store上找到)等软件实现合盖不休眠。
图片来自NoSleep在App Store中的介绍
03
把程序传到服务器上,在服务器上跑
假设你已经拥有一个Linux系统的远程服务器,如果你希望在该服务器上永不休眠地跑程序,哪怕你已经与服务器断开了连接,你需要两个步骤:连接服务器,退出登录的时候让服务器不要杀死你的程序。连接服务器顾名思义,我们主要通过ssh进行连接;而后者又有好几种方法。第一种是分离会话,另一种则是在后台运行程序,然后让程序在收到会话结束信号的时候继续执行。
这样一来,你只需要连上服务器,然后一通操作,就能合上电脑盖继续跑程序了!值得一提的是,不少朋友认为本地分离会话以后就可以在休眠的情况下继续运行程序,实际上这是不对的。
那么我们具体应该怎么做呢?
通常我们使用Secure Shell(SSH)的方式与远程服务器建立连接。在此介绍一种口令登录SSH的方式,打开你的终端(commander),输入这条命令:
ssh user@hostname
user是你的用户名,hostname是你服务器的地址,它可以是URL(kexieniubi.kexie.com),也可以是IP(192.168.1.77)。
如果你需要和其他用户用同一个用户名登录到服务器的不同端口,例如你要用name用户名登录host.com的77端口,那么你只需要这么写:
ssh -p 77 name@host.com
接下来,根据提示即可输入密码完成登录。如果你是第一次登陆该服务器,在确认服务器的安全验证后(限于篇幅,本文不介绍ssh如何进行安全验证的,有兴趣的读者可以自行搜索),遇到这句话的时候打“yes”。
Are you sure you want to continue connecting(yes/no)?
接下来的操作,就需要在已登录的服务器上完成了。这里有五种方法供你选择,但每一种方法都使用了不同的库,在使用之前,记得搜索一下Linux安装对应的库。(本文仅介绍这些工具的基本使用方法,对于更具体的细节,可以点击“阅读原文”)。
方法1 screen
screen是一种Linux下的窗口管理器。用户可以通过screen同时处理多个终端的对话,运行对话或在对话之间切换,无需担心掉线、登出等问题。
使用命令screen开启一个新的会话:
screen
然后你就能在这个会话中快乐地跑程序了。但是如果这个时候直接logout的话,这个会话仍然会被杀掉,因此需要先将这个会话解绑,方法是按下Ctrl+a之后再按d。然后这个程序就会在后台运行了!
当然,我们有的时候需要将之前的会话恢复,这个时候就可以调用
screen -r # 恢复上一个会话screen -r # 恢复指定会话
方法2 tmux
tmux 是一种可以用来替代screen但是比screen能力更强的插件。在使用逻辑上和screen很像:通过tmux指令开启一个会话,按下Ctrl+b然后d解绑,使用tmux attach恢复会话。
此外,用tmux,你还可以给创建的session取名字:
tmux new -s
然后就能在恢复的时候用名字来指定:
tmux a -t
并且你能用
tmux ls
查看当前的所有tmux会话。
方法3 nohup
当ssh会话关闭的时候,会话会向进程发送SIGHUP信号。而nohup则会告诉你的指令忽视这一个信号,因此可以实现登出以后继续跑程序。你只需要输入:
nohup [你的指令] & # &是让其在后台执行
该指令会返回[JOBID] PID。之后可以通过指令
fg %JOBID
查看该程序的运行状态。
方法4 disown
disown的大致原理是将某一个任务从系统任务队列中移除,因此就不会收到会话结束的SIGHUP信号了。(注意:如果要使用disown的话,执行的程序不能有stdin和stdout)。
[你的命令] &jobs -l # 查看任务disown -h %JOBID # 查看任务的时候能找到对应的JOBID
方法5 setsid
指令
setsid [你的指令]
会为你的指令创建一个进程并解绑。之后可以通过指令:
ps -ef | grep [你之前输入的指令]
查看该指令是否执行完成。
在多核系统上,程序员常常使用多线程来充分利用资源,然而人和电脑不一样,人只有一个大脑一个心脏。建立在世一大常年堵自行车的基础上,多线程骑车还是其他“路友”的安全威胁。
当事人在某乎上也这样说明道:
小协也要在这里提醒大家,道路千万条,安全第一条,在校园骑⻋一定要注意安全,对自己负责也是对他人负责。
当然,如果以上几种方法还不能让你放心大胆地把电脑合上跑代码,那小协负责。
扫码关注,进入这片酒井人的新乐园?
文案 | 潘紫琪 程紫菲 张书宁 吴明恒 夏奇
排版 | 夏 奇
技术审核 | 曾奥涵
审核 | 夏 奇