2012-11-06 11 views
5

Attualmente sto scrivendo un programma Haskell che esegue alcune operazioni di inizializzazione e quindi chiama ncmpcpp. Quello che sto cercando di fare è avviare ncmpcpp e terminare il programma Haskell, in modo che sia lasciato solo ncmpcpp (facoltativamente, il programma può continuare a funzionare in background, purché non invadente)Scambia to shell script e termina processo originale con Haskell

Tuttavia, anche se sono in grado per avviare ncmpcpp, non posso interagire con esso. Vedo il suo output, ma l'input sembra impossibile.

Quello che sto facendo attualmente è:

import System.Process (createProcess, proc) 
... 
spawnCurses :: [String] -> IO() 
spawnCurses params = do 
    _ <- createProcess (proc "ncmpcpp" params) 
    return() 

Che cosa sto facendo di sbagliato/Cosa devo fare in modo diverso?

risposta

5

Quello che stai cercando di ottenere suona come quello della famiglia di funzioni exec. Dai un'occhiata alla funzione executeFile.

Se si desidera che il processo padre Haskell sia ancora in esecuzione dopo l'avvio del processo figlio, leggere fork-exec e la funzione forkProcess.

Un esempio completo di utilizzo di forkProcess insieme a executeFile è disponibile al numero http://therning.org/magnus/archives/727.

+0

Questo era esattamente ciò di cui avevo bisogno. Grazie mille! – Sacchan