gpt4 book ai didi

ruby - 在不杀死父级的情况下退出子shell中的ruby

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:55 24 4
gpt4 key购买 nike

我有一个调用 Ruby programB 的 Ruby programA:

 system("ruby programB.rb <parameters>")

在某些情况下,我希望 programB 终止其操作(以及关联的子 shell)但允许 programA 继续执行下一组参数。

但是,exit()abort() 会杀死子 shell 和父 shell,我无法得到 Process.kill("SIGTERM",0) 在 programB 中工作(不幸的是,这是在 Windows 上)。我正在运行 ruby​​ 1.9.2。

如何在不杀死 programA 的情况下终止 programB?

最佳答案

如果常规的 system 调用没有成功,通常的方法是做这样的事情:

pid = fork do
exec("ruby programB.rb ...")
end

kill("SIGTERM", pid)

fork 操作为您提供了一个可以终止的进程标识符。 system 将阻塞直到子进程返回,因此在父进程中调用 kill 只会影响父进程。

不幸的是,Windows 中没有fork,但有alternatives。实现同样的目标。

关于ruby - 在不杀死父级的情况下退出子shell中的ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13999231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com