- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
简单的例子,它在我的平台上不起作用(Ruby 2.2
,Cygwin
):
#!/usr/bin/ruby
backtt = fork { exec('mintty','/usr/bin/zsh','-i') }
Process.detach(backtt)
exit
这个小程序(当从 shell 启动时)应该跨越一个终端窗口 (mintty) 然后让我回到 shell 提示符。
但是,虽然它确实创建了 mintty 窗口,但之后我没有 shell 提示符,而且我无法在调用 shell 中键入任何内容。
但是当我在分离之前引入一个小的延迟时,无论是使用“ sleep ”,还是通过在标准输出上打印一些东西,它都会按预期工作:
#!/usr/bin/ruby
backtt = fork { exec('mintty','/usr/bin/zsh','-i') }
sleep 1
Process.detach(backtt)
exit
为什么这是必要的?
顺便说一句,我很清楚我可以(从 shell)做一个
mintty /usr/bin/zsh -i &
直接,或者我可以从 Ruby 内部使用 system(...... &
),但这不是这里的重点。我对 Ruby 中的 fork/exec/detach
行为特别感兴趣。有什么见解吗?
最佳答案
发布为答案,因为评论太长了
虽然我不是 Ruby 专家,也完全不了解 Cygwin,但这种情况对我来说非常很熟悉,来自 C/C++。
此脚本太短,因此父级的父级完成,而孙级尝试开始。
如果在 detach 之后和 exit 之前放置 sleep 会发生什么?
如果我的理论是正确的,它也应该有效。您的程序在任何(或足够多)线程切换发生之前退出。
我把这样的问题称为“间断的握手”。虽然这是心理学术语,但它描述了发生的事情。
sleep“放弃时间片”,导致线程切换,
控制台输出(任何文件 I/O)遇到信号量,也会导致线程切换。
如果我的想法是正确的,它也应该工作,如果你不“ sleep ”,只需数到 1e9(取决于计算速度),因为抢占式多任务处理甚至线程切换本身也不会放弃 CPU。
所以这是编程中的一个错误(恕我直言:在这种情况下,竞争条件是哲学上的),但很难找到“谁”负责。涉及的内容很多。
关于Ruby - fork、exec、detach ....我们这里有竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260083/
谷歌搜索后,此选项的精度极低, 具体来说,我想知道什么是“分离键”,什么是“分离容器的键序列”, 任何提示都会很棒, 谢谢 最佳答案 你好吗?正如这里所解释的:Docker Attach Docume
实体类: public class CustomerSurvey implements Serializable { @Id @GeneratedValue(strategy=GenerationTy
我正在经历这个例子 - https://github.com/pytorch/examples/blob/master/dcgan/main.py我有一个基本问题。 fake = netG(noise
我正在使用 JQuery 1.5 和以下代码在单击按钮时分离带有特定类的 li 元素。我想知道的是,当再次单击该按钮时,如何将元素添加回页面? $("#remove").click(
clone() 与 detach() 对比 Torch 为了提高速度,向量或是矩阵的赋值是指向同一内存的,这不同于 Matlab。如果需要保存旧的tensor即需要开辟新的存储地址而不是引用,可以
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends Stateles
我已经分离了一个 div,并希望在单击按钮时重新附加它。 代码如下: $('#wrapper').detach(); $("#open_menu").click(function(){ ATT
加载页面中的所有脚本后,我可以安全地调用 $('script').detach(); 从 DOM 中删除脚本吗? 注意:它相当于 Array.from(document.getElementsByTa
我正在尝试修改旧版 Delphi 5 应用程序,以便可以从其图标/通过资源管理器或从控制台(命令行)启动它。当它从控制台启动时,我希望程序将自身与控制台进程分离,以便控制台可以继续执行其他指令,而无需
我正在使用 jQuery 1.3.2,目前我还不能指望升级。考虑一下在 1.4.2 中运行的代码: var some_elem = $('#some_element'); var other_elem
我有这样的东西: //html Action 1 Action 1 Action 1 ...
void helloFiber(boost::fibers::future &f) { cout pm; boost::fibers::future ft = pm.get_futu
我正在尝试使用“ref”属性从树中删除元素
对于Decorator设计模式,GoF明确指出: With decorators, responsibilities can be added and removed at run-time simp
我有一个函数 f,我想在一个单独的进程中生成它,该进程的生命周期应该独立于其父进程。执行此操作的最佳方法是什么? 我还没有找到一种使用 multiprocessing.Process(target=f
在我正在处理的这个模块中,我有一个监听窗口中的“调整大小”事件的监听器。每次运行模块时,我都需要检查是否已经有一个监听器注册到该事件并将其分离,以避免不必要的行为、内存泄漏等。 到目前为止一切顺利,但
我在我认为是我的分支的地方做了几十次提交,然后检查了另一个分支。 愿意回到我最初的分支,我没有找到我更新的代码。在控制台查看我的历史记录后,我了解到我在一个独立的分支机构工作...... 是否有可能以
在 Laravel 文档中,我发现 detach() 方法可以分离多对多关系中的所有对象。 Laravel 中的 detach() 方法也可以应用于一对多关系吗?如果没有,在这种情况下如何分离所有 n
我有: class _PageState extends State with WidgetsBindingObserver { @override void initState() {
我的应用程序使用一个在应用程序生命周期中存在的上下文实例。我使用 Entity Framework 来读取和写入所有数据到数据库。添加对象后,我希望它们被垃圾收集器清理,这样它们就不会保留在内存中。我
我是一名优秀的程序员,十分优秀!