Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 处理守护进程的输入和输出_Ruby_Linux_Daemons - Fatal编程技术网

Ruby 处理守护进程的输入和输出

Ruby 处理守护进程的输入和输出,ruby,linux,daemons,Ruby,Linux,Daemons,我想在Linux上创建一个ruby程序的守护进程 我还希望守护进程是交互式的——我希望能够通过文件/管道/最简单的方法向守护进程发送输入,并接收到文件的输出 我该怎么做呢 我已经研究了模块守护进程(http://daemons.rubyforge.org/),线程和方法popen3,但我很难让它们完成上述任务 答复: 姆拉登方法: 我有一个创建守护进程的控制器:(您需要守护进程模块gem) 这里是myDaemon.rb: puts `pwd` File.open('my_pipe', 'r+'

我想在Linux上创建一个ruby程序的守护进程

我还希望守护进程是交互式的——我希望能够通过文件/管道/最简单的方法向守护进程发送输入,并接收到文件的输出

我该怎么做呢

我已经研究了模块守护进程(http://daemons.rubyforge.org/),线程和方法popen3,但我很难让它们完成上述任务

答复: 姆拉登方法:

我有一个创建守护进程的控制器:(您需要守护进程模块gem)

这里是myDaemon.rb:

puts `pwd`

File.open('my_pipe', 'r+') do |f|
    loop do
            line = f.gets
            puts "Got: #{line}"
    end
end
步骤: 这两个文件都在我的根目录\。 Daemons.run在\中创建守护进程

  • 创建命名管道mkfifo./my_pipe

  • ruby controller.rb启动

  • 猫>我的烟斗

  • 键入文本

  • ctrl-c停止输入

  • cat o.output以查看您的输出

  • 打开与未使用但您和希望与其通信的程序已知的端口的绑定。如果守护进程只需要与同一台计算机上的进程通信,则使用Unix域套接字(请参阅
    socket.Unix\u server\u loop
    )。如果它还需要与运行它的主机之外的进程通信,那么您需要打开一个internet套接字(请参阅
    socket.tcp\u server\u loop

    服务器的常规配方为:

    • 打开插座
    • 绑定到主机的ip地址和选定端口(tcp),或绑定到系统上的路径(unix)
    • 等待(选择)某个连接
    • 接受连接
    • 进入读/写通信循环
    在客户机上:

    • 打开插座
    • 连接到服务器的地址/端口,或连接到服务器正在使用的Unix域套接字的路径
    • 连接后,进入写/读通信循环

    您的服务器和客户端需要就谁先发送什么以及另一方的相应响应达成一致。

    可能是最简单的方法,命名管道,基于:

    步骤1:创建命名管道

    mkfifo ./my_pipe
    
    步骤2:创建“守护进程”:

    然后运行它

    步骤3:打开另一个终端并运行

    cat > my_pipe
    
    然后开始一行一行地输入一些文本

    步骤4:观察守护进程的输出

    第五步:


    第六步:利润。

    非常感谢!我花了好几天的时间想弄明白!
    File.open('my_pipe', 'r+') do |f|
      loop do
        line = f.gets
        puts "Got: #{line}"
      end
    end
    
    cat > my_pipe