我是一般的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