Tengo un proceso de ejecución larga y necesito que inicie otro proceso (que también se ejecutará durante un buen tiempo). Necesito solo comenzarlo, y luego olvidarme por completo.¿Cómo disparar y olvidar un subproceso?
Logré hacer lo que necesitaba sacando un código del libro Programación Ruby, pero me gustaría encontrar la mejor/correcta manera, y entender lo que está pasando. Aquí es lo que tengo inicialmente:
exec("whatever --take-very-long") if fork.nil?
Process.detach($$)
Por lo tanto, este es el camino, o de qué otra manera debería hacerlo?
Después de comprobar las respuestas a continuación que terminó con este código, que parece tener más sentido:
(pid = fork) ? Process.detach(pid) : exec("foo")
lo agradecería una explicación sobre cómo fork
obras. [tengo eso ya]
Se separó $$
derecho? No sé por qué funciona esto, y realmente me encantaría tener una mejor comprensión de la situación.
Ok, creo que tengo el .nil? comprobar. En el niño realmente no devuelve 0, devuelve nil. Entonces el ejecutor se ejecutará si estás en el niño. Entonces, ¿cómo capturaría la otra devolución de la horquilla, la que devuelve la identificación del proceso secundario? De esta forma podría usarlo directamente en lugar de depender de $$. – kch
simplemente llame al tenedor y capture el resultado. luego, si tienes cero, haz el ejecutivo, de lo contrario, eres el padre. – Alnitak
Esta es una definición tan brillante y concisa de 'horquilla'. Buen trabajo, gracias. – KomodoDave