2012-08-16 9 views

risposta

25

@ opere risposta di TanzeebKhalili, ma si potrebbe considerare Kernel.spawn(), che non attendere che il processo per tornare:

pid = spawn("./test.sh") 
Process.detach(pid) 

Si noti che, secondo la documentazione, se usate spawn() o manualmente fork() e system() , dovresti prendere il PID e Process.detach() o Process.wait() prima di uscire.

Per quanto riguarda il reindirizzamento degli errori e standard output, che è facile con spawn():

pid = spawn("./test.sh", :out => "test.out", :err => "test.err") 
Process.detach(pid) 
+0

Nizza, funziona anche in finestre! con più processi che scrivono in testing.out alcune linee sono confuse anche se – peter

+0

@peter Sì, fare le scritture bufferizzate nello stesso file simultaneamente da più processi farebbe effettivamente ingarbugliare alcune linee. Esistono numerose soluzioni a questo problema, ma la più semplice è semplicemente scrivere su un file separato da ogni processo. Altrimenti probabilmente vorrai un processo separato per multiplexare l'output. –

8

Prova questo:

Process.fork { system "./test.sh" } 

non funziona su Windows, per il quale è possibile utilizzare threading.

Problemi correlati