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