.
.
原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/freezer-subsystem.html
翻译:河东西望
.
.
cgroup freezer也用来给运行的任务组设置检查点。freezer允许检查点代码通过强制cgroup中的任务到静止状态来获取连续的任务镜像。一旦任务静止,另一个任务就能进入/proc或者调用内核接口来收集这些静止任务的信息。设置了检查点的任务能够被重启,也可以从错误中恢复。这也允许设置了检查点的任务能在节点间迁移,通过复制采集的信息到另外的节点然后在那个节点上重启任务。
在用户空间里停止和恢复任务,SIGSTOP和SIGCONT信号序列总不是那么足够。这两个信号都可以从我们希望冻结的任务内观察得到。当SIGSTOP不能被捕捉,被阻塞或者被忽略,它就能被正在等待或者跟踪(ptracing)的父任务看到。SIGCONT特别地不适合,因为它能被任务捕捉到。任何程序被设计用来观察SIGSTOP和SIGCONT信号,都可能会被使用SIGSTOP和SIGCONT信号来停止和恢复任务的企图破坏掉。我们可以嵌套的bash shell来演示证明这个问题:
$ echo $$
16644
$ bash
$ echo $$
16690
From a second, unrelated bash shell:
$ kill -SIGSTOP 16690
$ kill -SIGCONT 16690
<at this point 16690 exits and causes 16644 to exit too>
这种情况发生是因为bash能观察到两个信号,选择了如何来响应它们。
另一个能够捕捉并相应这些信号的程序例子就是gdb。实际上任何使用了ptrace的程序,用这种方法来停止和恢复任务,都有这个问题。
相比之下,cgroup freezer使用内核freezer代码来防止freeze/unfreeze循环。
cgroup freezer是分层结构。冻结cgroup会冻结掉属于该cgroup和它的子cgroups的所有任务。每个cgroup有它自己的状态(自状态self-state)和继承自父系的状态(父状态parent-state),如果两个状态都是THAWED,那么cgroup就是THAWED。
下面的cgroupfs文件由cgroup freezer创建:
当所有任务和子任务变成frozen,cgroup就从FREEZING状态迁移到FROZEN状态。注意,新任务添加到cgroup或者子cgroup之后直到被冻结之前,cgroup会从FROZEN反转到FREEZING。
当写入文件,就会设置cgroup的自状态。只允许两个值:“FROZEN”和“THAWED”。如果写入FROZEN,cgroup如果还没有准备freezing就会跟它的所有子系一起进入FREEZING状态。
如果写入THAWED,cgroup的自状态更改为THAWED。注意,如果父状态仍然是freezing,实际的状态可能不会改变为THAWED。如果cgroup的实际状态变为THAWED,它的所有正在冻结中子系也会离开freezing状态。
freezer.self_freezing: Read only
显示自状态。如果自状态是THAWED,值就是0,否则就是1。如果最后写入freezer.state的是FROZEN,那这个值也是1。
freezer.parent_freezing: Read only
显示父状态,如果它的任何父系都不是frozen,那么值就是0,否则就是1。
root cgroup是不可冻结的,上述的接口文件都不存在。
使用示例:
# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/0
# echo $some_pid > /sys/fs/cgroup/freezer/0/tasks
获取freezer子系统状态:
# cat /sys/fs/cgroup/freezer/0/freezer.state
THAWED
冻结容器内所有任务:
# echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state
# cat /sys/fs/cgroup/freezer/0/freezer.state
FREEZING
# cat /sys/fs/cgroup/freezer/0/freezer.state
FROZEN
解冻容器内所有任务:
# echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state
# cat /sys/fs/cgroup/freezer/0/freezer.state
THAWED
这就是用户空间任务在简单场景下正确处理事物的基本机制。
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
英文版英文链接关注公众号在“亚特兰蒂斯的回声”中踏上一段难忘的冒险之旅,深入未知的海洋深处。足智多谋的考古学家AriaSeaborne偶然发现了一件古代神器,揭示了一张通往失落之城亚特兰蒂斯的隐藏地图。在她神秘的导师内森·兰登教授的指导和勇敢的冒险家亚历克斯·默瑟的帮助下,阿丽亚开始了一段危险的旅程,以揭开这座传说中城市的真相。他们的冒险之旅带领他们穿越险恶的大海、神秘的岛屿和充满陷阱和谜语的致命迷宫。随着Aria潜在的魔法能力的觉醒,她被睿智勇敢的QueenNeria的幻象所指引,她让她为即将到来的挑战做好准备。三人组揭开亚特兰蒂斯令人惊叹的隐藏文明,并了解到邪恶的巫师马拉卡勋爵试图利用其古
很高兴看到google代码:google-api-ruby-client项目,因为这对我来说意味着Ruby人员可以使用GoogleAPI-s来完善代码。虽然我现在很困惑,因为给出的唯一示例使用Buzz,并且根据我的实验,Google翻译(v2)api的行为必须与google-api-ruby-client中的Buzz完全不同。.我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索器。它所做的只是调用一个Buzz服务,然后浏览它已经知道的关于Buzz服务的事情。对我来说,Explorer应该让您“发现”所公开的服务和方法/功能,而不一定已经知道它们。我很想听听使用这个
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
在使用rails4和https://github.com/globalize/globalize的情况下,我应该如何为我的模型编写表单?用于翻译。我想以一种形式显示所有翻译,如下例所示。我在这里找到了解决方案https://github.com/rilla/batch_translations但我不知道如何实现它。这个“批量翻译”是一个gem还是什么?以及如何安装它。EditingpostEnglish(defaultlocale)SpanishtranslationFrenchtranslation 最佳答案 批处理翻译gem很旧
我有以下python函数来递归查找集合的所有分区:defpartitions(set_):ifnotset_:yield[]returnforiinxrange(2**len(set_)/2):parts=[set(),set()]foriteminset_:parts[i&1].add(item)i>>=1forbinpartitions(parts[1]):yield[parts[0]]+bforpinpartitions(["a","b","c","d"]):print(p)有人可以帮我把它翻译成ruby吗?这是我目前所拥有的:defpartitions(set)ifnots
♥️作者:白日参商🤵♂️个人主页:白日参商主页♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!「想体验ChatGPT中文聊天?」那快进来,你用不上算我输项目场景:项目条件一、那就开始吧1、安装ChatGPT-Desktop2、OpenAPI设置二、使用实例恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!项目场景:近几个月可以说ChatGPT是火得一
对于体育新闻中文文本的关键字提取,常用的算法包括TF-IDF、TextRank和LDA等。它们的基本步骤如下:1.TF-IDF算法: -将文本进行分词和词性标注处理。-统计每个词在文本中的词频(TF)。-计算每个词在整个语料库中出现的文档频率(DF)和逆文档频率(IDF)。-计算每个词的TF-IDF值,并按照值的大小进行排序,选择排名前几的词作为关键字。2.TextRank算法:-将文本进行分词和词性标注处理。-将分词结果转化成图模型,每个词语为节点,根据词语之间的共现关系建立边。-对图模型进行迭代计算,计算每个节点的PageRank值,表示该节点的重要性。-选择排名前几的节点作为关键字。3.
RailsAdmin中Post的“正文”输入区域的默认高度非常小。我想弄清楚如何增加高度。有什么建议么?config.modelPostdolabel'Blog'weight0editdofield:userfield:titlefield:body_formatfield:bodydo(somethinghere?)end 最佳答案 configure:descriptiondohtml_attributesrows:20,cols:50end 关于ruby-on-rails-Rail
所以我知道如果我在读取yaml文件时遇到“翻译缺失:”如何返回默认值。some=I18n.t("something.something_else",default:"value")但是如果我希望默认值为nil,我该如何以Ruby的方式做到这一点呢?我知道我可以正则表达式并匹配变量some中的“translationmissing:”,如果它匹配,我会将它分配给nil。但我想做的是拥有some=I18n.t("something.something_else",default:nil)但它只是返回了我缺少的翻译。有谁知道好的方法吗? 最佳答案