다른 스크립트를 생성하고 데이터베이스에 PID를 유지하는 대신 fork
을 사용하고 PID를 메모리에 유지하면서 동일한 스크립트 내에서 모두 수행 할 수 있습니다. 다음은 샘플 스크립트 - 당신이 "종료"로 종료, 명령 콘솔에서 "델", "추가"를 입력하여 "노동자 인스턴스"를 추가 및 삭제 : 물론
@pids = []
@counter = 0
def add_process
@pids.push(Process.fork {
loop do
puts "Hello from worker ##{@counter}"
sleep 1
end
})
@counter += 1
end
def del_process
return false if @pids.empty?
pid = @pids.pop
Process.kill('SIGTERM', pid)
true
end
def kill_all
while del_process
end
end
while cmd = gets.chomp
case cmd.downcase
when 'quit'
kill_all
exit
when 'add'
add_process
when 'del'
del_process
end
end
, 이것은 단지 예이며, 대한 보내기 및/또는 모니터링 인스턴스를 사용하면이 간단한 gets
루프를 작은 Sinatra 앱 또는 소켓 인터페이스 또는 명명 된 파이프로 바꿀 수 있습니다.
"수신 대기"란 무엇을 의미합니까? –
직렬 포트에서 수신 대기하려면 serialport gem을 사용하고 있습니다. –