Popen recebendo pid do novo processo de execução

Eu quero executar algum aplicativo em segundo plano e depois matá-lo por pid.

pipe = IO.popen("firefox 'some_url' 2>&1 &")
pipe.pid

Esse código inicia o firefox e me devolve alguns pid, mas infelizmente não é o pid do firefox.

pipe = IO.popen("firefox")
pipe.pid

Este código inicia o firefox e retorna mi pid, o pid do firefox. Existe alguma solução para iniciar aplicativos externos e obter seu pid? O Firefox é apenas por exemplo, poderia ser qualquer outro aplicativo. Eu também tentei com bibliotecas como: Open3 e Open4, mas parece ter o mesmo efeito. Também me pergunto se '$!' variável bash é boa solução para isso? Execute algo em segundo plano e leia '$!', O que você acha?

questionAnswers(2)

yourAnswerToTheQuestion