2

我尝试在 Windows 的 cmd.exe 中运行以下 Haskell 程序,而 waitForProcess 正在执行,按 ctrl-c 不会杀死程序。但如果在 MinGW shell 下运行,它就可以工作。有任何想法吗?(注意:Windows 没有“睡眠”命令,我自己写了一个。)

{-# Language OverloadedStrings #-}
import System.Process

main ∷ IO ()
main = do
  putStrLn "sleeping"
  (_, _, _, pHandle) <-
    createProcess CreateProcess { 
          cmdspec = RawCommand "sleep" ["5"]
        , cwd = Nothing
        , env = Nothing
        , std_in = CreatePipe, std_out = CreatePipe, std_err = CreatePipe
        , close_fds = False
        , create_group = False
        } 
  waitForProcess pHandle
  putStrLn "all done"
4

3 回答 3

1
module Main where

import System.Process

main = do callCommand "sleep 5"
       putStrLn "all done"

cmd.exe 的 sleep 可以正常运行上面的代码!Ctrl+C 也终止!在Hackage中记录了用于常见任务的更简单的函数。

于 2014-11-19T10:07:40.423 回答
1

看来这是 mingw 和 cygwin 如何处理控制台的问题:

http://www.mail-archive.com/cygwin@cygwin.com/msg104921.html http://comments.gmane.org/gmane.os.cygwin/135374

于 2013-02-18T23:55:52.757 回答
0

系统调度程序在等待内核对象的事件时没有为线程腾出一些时间。
解决方案是从与主线程不同的另一个线程调用 waitForProcess。

于 2013-01-02T08:37:26.627 回答