在Ruby中,有多種方法可以實現進程間通信(IPC)。以下是一些常用的IPC方法:
IO.pipe
方法創建管道。# 創建一個管道
read_pipe, write_pipe = IO.pipe
# 在子進程中寫入數據
write_pipe.write("Hello from child process!\n")
write_pipe.close
# 在父進程中讀取數據
data = read_pipe.read
puts "Received: #{data}"
read_pipe.close
File.open
方法創建命名管道。# 創建一個命名管道
File.open("my_named_pipe", "w+") do |pipe|
# 在子進程中寫入數據
pipe.write("Hello from child process!\n")
pipe.close
# 在父進程中讀取數據
pipe.rewind
data = pipe.read
puts "Received: #{data}"
end
Process
類的kill
方法發送信號。# 在父進程中發送信號
Process.kill("TERM", Process.pid)
Thread::Queue
類創建消息隊列。# 創建一個消息隊列
queue = Thread::Queue.new
# 在子進程中添加數據到隊列
queue << "Hello from child process!"
# 在父進程中從隊列中獲取數據
data = queue.pop
puts "Received: #{data}"
Thread::SharedMemory
類創建共享內存。# 創建一個共享內存對象
shared_memory = Thread::SharedMemory.new("my_shared_memory", 1024)
# 在子進程中寫入數據到共享內存
shared_memory.write("Hello from child process!")
# 在父進程中從共享內存中讀取數據
data = shared_memory.read(1024)
puts "Received: #{data}"
# 關閉共享內存對象
shared_memory.close
Socket
類創建套接字。# 在父進程中創建一個TCP套接字
socket = Socket.new(:INET, :STREAM)
socket.bind("0.0.0.0", 8080)
socket.listen(5)
# 在子進程中接受連接并接收數據
client_socket, client_address = socket.accept
data = client_socket.read
puts "Received: #{data}"
# 關閉套接字
client_socket.close
socket.close
這些是Ruby中常用的進程間通信方法。你可以根據具體需求選擇合適的方法進行通信。