么往里数据?
还没得及细,顶突然传闷响,,更像么巨被撕裂音。抬,到空正央现条裂缝。闪,闪亮、瞬消失。条裂缝,像拿刀布划子,背虚空。裂缝边缘闪烁着,像伤渗血。
尖叫更。始,站原哭,个老爷推着自仰半,嘟囔句“妈个巴子”,然继续骑。
周逸凡没。盯着条裂缝,子里速运转。数据涌入、空撕裂、子设备异常——如果个程序崩溃现,空裂缝就栈溢导致段错误,边缘泄漏颜,而里正接收,崩溃最入志coredump。
,屏幕消失,取而代之个标。背景,标,闪闪,等着输入么。
标方字:
[system]runtimepanic:segmentationfaultatxFFFCDA
[system]attemptingtorecover...
[system]recoveryfailed.launchingemergencyshellonnearestcapabledevice.
[system]devicefound:Homosapiens,ID:XXXXXX.
[system]emergencyshellready.typehelpforcom***nds.
周逸凡嘴角抽。见过无数次panic信息,过无数次recoveryhandler,但从没次自己、以种方式到。而且——Homosapiens?最用设备智?也就,现变成个命令终端?
吸,用颤抖指碎裂屏幕敲个字母:help
屏幕刷,现串命令列表。部分命令起像系统调试具:mem_***p、thread_list、heap_***yze、signal_send。最条命令引起注:
reboot_world[--force][--rollback=<checkpoint_id>]
周逸凡抬空裂缝。子正缓扩,边缘越越亮,像么从里面挤。突然到个问题:如果个世界个正运程序,空裂缝段错误,么当段错误没被处理候,操作系统么?
杀掉个程。
换句话,个世界崩溃。而,个刚被裁员程序员,里握着个世界紧急调试终端。
忍笑。得好笑,种被活逼到绝境之,现老爷比自己还倒霉苦笑。被裁员,没系,老爷程序也崩。都打,谁比谁贵?
又震,条系统消息弹:
[warning]unhandledexceptionin***ineventloop.nextexceptionin::.
到分钟。个异常到分钟之,而次,能就没么“紧急shell”。
周逸凡扫命令列表,到thread_list。执,屏幕列堆线程,每个线程都个奇怪名字:[gravity]、[electro***gnetism]、[strong_nuclear]、[weak_nuclear]、[consciousness]、[time_flow]……最个[***gic_overflow],状态栏着zombie。
僵尸线程。个应该已经被杀但没被回收线程,卡里,断消耗资源。很能就导致段错误罪魁祸首。
周逸凡吸。辈子处理过无数僵尸线程,方法很简单:到父程,然制终止。但问题,个世界父程谁?或者,个程序谁?
没细。屏幕又弹条警告,倒计还剩分钟。已经半,剩些蹲边抱痛哭。空裂缝已经扩到原两倍,裂缝里透再,而种从未见过颜——、、任何种已颜,更像“颜”个概本被撕裂,底空。
周逸凡唯能事。输入kill_thread***gic_overflow--force。
屏幕现输:
[system]cannotkillthread***gic_overflow:permissiondenied.
[system]requiredprivilege:root.currentprivilege:guest.
愣。guest?现只访客权限?何用?
然起——紧急shell通常两种模式:种root模式,以执任何命令;另种用户模式,只能查状态,能修改。现guest,也就最权限,连志都能受限。
又震。次警告,条系统消息,源[system],而[messagefrom:unknown]:
被裁,但个世界还没。root权限吗?把签名注释里。
周逸凡皱起眉。签名?注释?消息措辞方式——像极以代码里到TODO注释。识屏幕底部标,然尝试输入个命令,就像Linux终端里个heredoc样:
echo"/*周逸凡,-,辈子屎代码,最被老爷当补丁用*/">>/dev/root_sign
按回。屏幕沉默两秒钟,然现字:
[system]signatureaccepted.elevatingprivileges...
[system]currentprivilege:root.
[system]warning:withrootprivilegecomesrootresponsibility.youbreakit,youownit.
周逸凡盯着“youbreakit,youownit”字,种烈既。以代码仓库README里句话吗?原话“谁改坏谁修,修好别班”。么到里变成英文?
没琢磨。倒计还剩秒。输入kill_thread***gic_overflow--force,次没报错,屏幕现:
[system]thread***gic_overflowterminated.
空裂缝止扩。始变,裂缝边缘像被么填充,愈。倒计消失。剩抬起,零呼。个妇女跪始磕,嘴里叨着“菩萨保佑”。
周逸凡没呼。盯着屏幕,因为消息正条条:
[system]thread***gic_overflowterminated.reapingresources...
[system]warning:thread***gic_overflowhaduncommittedchanges.rollbackrecommended.
[system]auto***ticrollbacknotpossible.checkpointnotfound.
[system]initiating***nualrecoverymode.
然屏幕现个认识命令提示符:
recovery>
紧接着,个对话框弹——弹,而悬浮半透对话框,像AR镜里UI。对话框里着:
"检测到系统严损坏。恢复模式已启。请选择恢复方式:
回滚至最稳定照(推荐,但丢失约数据)
线修复,保留当数据(险,能需次启)
么都,让系统自崩溃(推荐,将导致逆数据丢失)"
周逸凡空。裂缝已经基本愈,只留疤痕,像样消散。面混还继续,但至老爷裂。
正准备选择“线修复”,指刚抬起,突然被只毛茸茸抢。
转,到个——只——个约厘米,站旁边垃圾桶盖。浑覆盖着毛,两只得谱睛,瞳孔竖着,像猫又像蜥蜴。朵尖尖,抖。穿着条迷装裤,胸袋里插着把比签螺丝刀。
“疯?”话,音尖细,语速极,“线修复?‘线修复’个字个语境着么吗?着到个僵尸线程留每个野指针,把悬空块个个捡回挂,同系统还运,数据还变化,改边边又崩——系统运维百,见过个选线修复管理员,个都修复过程。比喻,真。”
周逸凡张张嘴,又闭。遇到过个用毕所都无法解释况:只穿着装裤怪物,抢,然像运维老油条样跟讲野指针悬空。
沉默两秒,:“谁?”
把往垃圾桶盖放,双叉腰,挺起胸膛:“叫皮克,个世界首席运维程师。准确,首席。因为就刚才,把除。”
“没除。”
“杀僵尸线程,”皮克,“个线程养百。确实个bug,但个稳定bug。扩,传染,只偶尔让几个魔法师施法失败、让几棵反、让力某些方微偏移。倒好,就把杀。现好,留空洞补,个世界像米诺骨牌样块块塌掉。”
周逸凡起自己以个老项目里遇到过类似事。个bug,所都敢,因为没到底牵连。应届把修,然个系统崩溃夜。
“所以,”周逸凡,“线修复么?”
“就,”皮克叹,朵耷拉,“钻个裂缝里,到每处因为僵尸线程退而变成空洞方,用填正确值。能,能启,能错。因为每填对个,系统就稳定点;每填错个,就更步。”
“回滚呢?”
“回滚到百,”皮克,“候还没。回滚之,就。只,所里、成、相、,都。们变成从未过。愿吗?”
周逸凡沉默。到自己父母,到恋过个女孩,到公司卖煎饼果子叔——个每凌晨点摊,无阻,靠个煎饼摊供女儿完。
让些消失。
“选线修复,”。
皮克用种疯子神秒钟,然从装裤袋里掏副比还护目镜戴,郑其事点点:“。跟起。”
“为么?”
“因为妈破方干百运维,”皮克,“也得自己系统里,能个。而且——”顿顿,音,“线修复需个本向导。然连址儿都到。”
周逸凡弯腰从垃圾桶盖拿起。屏幕还悬浮着个对话框。用拇指点第项:"线修复,保留当数据"。
个世界,像灯泡压稳。然脚空,个往坠落。
坠落过程,到皮克边喊句:“抓紧!唯终端!丢就再也回!”
周逸凡识把攥得更紧。呼啸,周围线从变成颜再变成,自己像被塞个巨洗滚筒里,翻滚、旋转、脏腑都移位。
然,切都止。
睁,现自己站条廊里。廊壁半透,像琥珀,里面流淌着密密麻麻数字符号。廊无限,到尽。顶虚空,脚同样板。每隔段距,就个洞,像被么烧穿窟窿,边缘冒着。
皮克蹲肩膀,护目镜反射着廊:“迎到系统底层。们现址空xFFFCD附,就刚才杀僵尸线程位置。”
周逸凡里。屏幕亮着,显示着recovery>提示符。吸,问个自认为非常键问题:“些洞,就空洞?”
“对,”皮克,“每个洞都个野指针。们需到正确数据填。但问题于——们正确数据应该么。系统志里没记录,因为个僵尸线程从就没正常退过。突然,没留任何退码。”
周逸凡,问个程序员绝望刻才问问题:“没源代码?”
皮克沉默。
“没?!”周逸凡提音量。
“,”皮克,“但注释文,而且繁文,而且文言文。懂。”
“国,懂文。”
“懂千文言文吗?”
周逸凡再次沉默。
皮克叹:“别。们现能,就每个空洞旁边,观察周围分布,然猜测原应该么值。就像……就像修复个没文档、没注释、变量名都a、a、a遗留系统。”
周逸凡闭睛。最擅事吗?公司里,每都干个。没文档,没注释,所都,只个蹲屎代码面,,个变量个变量猜,最把系统修好,然被裁员。
睁,向第个洞。
“吧,”,“干活。”