Ваш конвейер
ps -aux | grep sox | kill 0
не будет делать то, что вы хотите. Это связано с тем, что kill
никогда не будет считывать ввод из grep
(, результат из grep
также будет содержать много других вещей, кроме PID процесса sox
).
Если у вас есть pkill
, просто выполните
pkill sox
вместо (используйте pkill -INT sox
для отправки того же сигнала, что и Ctrl+C ).
Если вы измените сценарий запуска на
#!/bin/bash
NOW=$( date '+%F_%H:%M:%S' )
filename="/home/pi/gets/$NOW.wav"
sox -t alsa plughw:1 "$NOW.wav" & sox_pid="$!"
printf 'sox pid is %d\n' "$sox_pid"
wait
# Alternatively (instead of "wait", if you want to kill sox after six seconds):
# sleep 6 && kill "$sox_pid"
echo "$filename"
Вы получите PID процесса sox
, напечатанный на терминале, и вы можете использовать его для выполненияkill pid
(с заменой pid
этим числом ).
Частое использование &
вызова sox
переводит его в фоновый режим. PID этой фоновой задачи автоматически сохраняется в $!
, а приведенный выше код назначает его sox_pid
, который позже распечатывается.
Команда wait
ожидает завершения команды sox
(, выполняемой в фоновом режиме ).
Как мы обсуждали в предыдущем сеансе:Двойные -кавычки всех расширений переменных.
Это зависит от того, какая файловая система установлена на вашем разделе. Для ext2/ext3 и ReiserFS вы можете найти помощь в Bad block HOWTO для smartmontools .
По сути, вы делаете вот что:
smartctl
, она сообщит вам, сколько времени это займет. debugfs
определить, находится ли это смещение внутри файла, и если да, то в каком файле. dd
. Жесткий диск заменит плохой блок запасным блоком. Вы можете найти подробности в вышеупомянутом HOWTO.