掌握操作系统:Ruby 中的进程管理与通信
1. 调试信息的条件打印
在 Ruby 中,我们可以根据 $DEBUG 标志来有条件地打印调试信息。这个标志依赖于 Ruby 解释器是否使用 -d 开关启动。示例代码如下:
m1 = gets.chomp; STDERR.puts m1 if $DEBUG
这里需要注意,可能会有两个解释器在运行,所以要确保正确的解释器开启了 -d 开关。
2. 进程复制:IO.popen 的特殊用法
当我们给 IO.popen 提供特殊文件名 “-” 时,Ruby 解释器会创建一个自身的精确副本作为新进程,运行相同的脚本。示例代码如下:
IO.popen("-", "w+")
# Now there are two of me!
["fee", "fie", "foe"].each {|x| STDERR.puts x}
输出结果可能会出现交错,因为父进程和子进程是重叠运行的,无法保证输出顺序。子进程从 IO.popen 调用后的位置开始执行,并且子进程的 STDIN 和 STDOUT 用于与父进程通信,所以子进程需要使用 STDERR 向屏幕输出信息。父进程可以通过 I
超级会员免费看
订阅专栏 解锁全文
1384

被折叠的 条评论
为什么被折叠?



