我是一般的Linux世界的新手。我正在尝试为RaspPi构建一个记录音频并播放的小脚本。它做了更多,但这是我遇到的问题。下面是相关的代码如何在ruby/bash脚本中杀死衍生的子进程
def start_recording
@file = rand(1000).to_s+".wav"
@pid = Process.spawn("sudo arecord > #{@file}")
end
def stop_recording
Process.kill('TERM', @pid)
end
def recording_looper
start_recording
interrupted = false
timer = Time.now
trap("INT") { interrupted = true }
until interrupted || (Time.now > timer + 5) do
#do nothing
end
stop_recording
get_input_from_user
end
基本上按预期工作弯针的精简版本,无论是从用户捕获控制-C或5秒后停止记录本身,而是Process.kill命令似乎没有不工作。如果我在另一个终端窗口收听wav,他们只是继续前进。我该如何正确地杀死这个产生的记录过程?
sudo进程作为子进程的所有者停留。你可以用'ps auxf'看到这个,看看'sudo'进程和子进程。不过,你是正确的,它是由root拥有的,你不能杀死它。对于我的例子,我使用了'sudo/bin/bash',但是对于其他进程,其行为可能有所不同? – zerodiff 2014-08-28 14:05:56