与 Ruby 守护进程对话

发布于 2024-09-28 13:15:58 字数 228 浏览 8 评论 0原文

我在程序中使用 Ruby 1.9 和以下方法:

Process.daemon

然后,当我打开一个新终端时,我想调用我的守护程序(名为 my_program)并向其发送一条消息。例如:

$ my_program --are_you_still_alive

谢谢您的任何想法。

I use Ruby 1.9 and the following method inside my program:

Process.daemon

Then, when I open a new terminal, I would like to call my daemonized program (named my_program) and send to it a message. Such as this:

$ my_program --are_you_still_alive

Thank you for any idea.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲影 2024-10-05 13:15:58

您可以使用信号来确定程序是否仍然存在,

Signal.trap("USR1") do
  puts "I'm alive"
end

然后调用

$ kill -USR1 $(pidof my_program)

you could use signals to determine if the program is still alive

Signal.trap("USR1") do
  puts "I'm alive"
end

then you call

$ kill -USR1 $(pidof my_program)
拥抱影子 2024-10-05 13:15:58

有多种方法可以进行 IPC(进程间通信)。一种方法是发送信号,正如 @lukstei 所显示的那样,这是他的答案。另一种方法是使用套接字,这里是一个守护进程的最小示例,您可以使用 TCP 套接字询问时间:

#!/usr/bin/env ruby -wKU

require 'socket'

case ARGV[0]
when "start"
  puts "start daemon"
  server = TCPServer.open('0.0.0.0', 9090)
  Process.daemon
  loop {
    conn = server.accept
    conn.puts "Hello !"
    conn.puts "Time is #{Time.now}"
    conn.close    
  }
when "time?"
  puts "Asking daemon what time it is"
  sock = TCPSocket.open('0.0.0.0', 9090)
  while line = sock.gets
    puts line
  end
  sock.close
end

让我们尝试一下:

$ ./my_daemon.rb start
start daemon
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:32 +0200
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:34 +0200

希望这会有所帮助!

There are several ways to do IPC (inter-process communication). One way is sending signals as @lukstei is showing is his answer. Another way is by using sockets, here is a minimal example of a daemon that you can ask for the time using TCP sockets:

#!/usr/bin/env ruby -wKU

require 'socket'

case ARGV[0]
when "start"
  puts "start daemon"
  server = TCPServer.open('0.0.0.0', 9090)
  Process.daemon
  loop {
    conn = server.accept
    conn.puts "Hello !"
    conn.puts "Time is #{Time.now}"
    conn.close    
  }
when "time?"
  puts "Asking daemon what time it is"
  sock = TCPSocket.open('0.0.0.0', 9090)
  while line = sock.gets
    puts line
  end
  sock.close
end

Let's try it out:

$ ./my_daemon.rb start
start daemon
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:32 +0200
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:34 +0200

Hope this helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文