2012-11-06 10 views
5

Obecnie piszę program Haskell, który wykonuje pewne prace inicjujące, a następnie wywołuje ncmpcpp. Próbuję uruchomić ncmpcpp i zakończyć program Haskell, tak aby pozostał tylko ncmpcpp (opcjonalnie, program może działać w tle, o ile nie przeszkadza)Rozwidlenie skryptu powłoki i zakończenie oryginalnego procesu z Haskellem

Jednak mimo tego, że jestem w stanie aby uruchomić ncmpcpp, nie mogę z nim współdziałać. Widzę jego wynik, ale dane wejściowe wydają się niemożliwe.

Co jestem obecnie robi to:

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

Co robię źle/Co należy zrobić inaczej?

Odpowiedz

5

To, co próbujesz osiągnąć, brzmi tak, jak robi to rodzina funkcji exec. Spójrz na funkcję executeFile.

Jeśli chcesz, aby proces macierzystego Haskella nadal działał po uruchomieniu procesu potomnego, przeczytaj o fork-exec i funkcji forkProcess.

Pełny przykład użycia forkProcess wraz z executeFile można znaleźć pod adresem http://therning.org/magnus/archives/727.

+0

To było dokładnie to, czego potrzebowałem. Dziękuję Ci bardzo! – Sacchan