John Goerzen wrote:
I'm using System.Cmd.rawSystem in a program and have noticed a mysterious flaw:
When I hit Ctrl-C while the child process is running, sometimes:
1) rawSystem returns ExitSuccess
or
2) rawSystem raises an IOError saying the child terminated with a signal
I am totally at a loss as to explain this difference in behavior. I would prefer it to choose option #2 always.
Would you like to submit a bug report on this, I'll try to get to it before GHC 6.6.
However, even that is not quite ideal. It seems like it would be much better if ExitCode would be replaced with System.Posix.Process.ProcessStatus, which can indicate an Exited (with exit code), Terminated by signal, or Stopped by signal status. Getting an exception when the child was terminated by a signal, but not when it exits with a failure, seems inconsistent.
The problem with this is that not all platforms are POSIX, and System.Process is trying to be platform-independent. Having a more elaborate version of System.Process under System.Posix.Process would be an option, though. You can reuse some of the bits from System.Process.Internals. Cheers, Simon