如何在Haskell中终止(SIGINT)子进程?

时间:2016-12-28 18:26:05

标签: unix haskell process

我正在Haskell中编写一个小程序,它操纵命令aplaymidiarecordmidi,通过MIDI在我的数码钢琴上录制简短的即兴创作。我将按 R 键,我的程序将使用命令arecordmidi创建一个新的子进程。当我再次按 R 时,我希望通过终止命令arecordmidi来停止录制。

如何终止import System.Process main = do let rec_command = "arecordmidi -p \"CASIO USB-MIDI\" myRecording.midi" process <- createProcess (shell rec_command) -- I could try the following code, but the documentation of System.Process -- says it's bad to use terminateProcess: let (_, _, _, processHandle) = process terminateProcess processHandle 子流程?如果在shell中, CTRL + C 将停止录制。这就是我想要的。

我正在使用以下代码创建子流程:

List<String>

1 个答案:

答案 0 :(得分:3)

terminateProcess向进程发送SIGTERM(终止)信号,该信号对应于unix命令kill的默认行为,这通常不是您在尝试结束时所需的行为一个很好的过程。

Ctrl+C发送信号SIGINT(中断),许多应用程序通过有序关闭处理这些信号,在您的情况下可能会导致arecordmidi进程保存未完成的数据,并关闭任何管道和文件。

使用SIGINT发送System.Process的方式与interruptProcessGroupOf相似。