Raspberry PiクラスのAVバグを作成しようとしています。
私は音を録音するためにsoxを使用しています。良い結果。
問題はsoxが停止して新しいファイルを生成するためにCtrl + Cが必要であることです。他の SSH セッションで killall を送信すると、他のセッションは削除され、sox はファイルを生成しません。
リスニング.sh
#! /bin/bash
NOW=$( date '+%F_%H:%M:%S' )
filename="/home/pi/gets/$NOW.wav"
sox -t alsa plughw:1 $NOW.wav;
sleep 6;
echo $filename
私はそれを防ぐために別のスクリプトを作成してみました。
Listen.shを殺す
#! /bin/bash
sleep 5;
ps | grep sox | kill 0;
それから
上付き文字.sh
#! /bin/bash
./listen.sh;
./killlisten.sh;
それでも出力ファイルを生成する方法でsoxをブロックする方法に関する提案があれば良いでしょう。理想的には、設定された時間に実行されるように設定されているため、人の対話を避けることが重要です。
ベストアンサー1
あなたのパイプライン
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"
sox
プロセスのPIDが端末に印刷され、それを実行するために使用できますkill pid
(pid
その番号に置き換えます)。
&
通常、呼び出しはsox
バックグラウンドに配置されます。このバックグラウンドジョブのPIDは自動的に保存され、上記の$!
コードはsox_pid
後で印刷するように割り当てられます。
このwait
コマンドは、sox
コマンド(バックグラウンドで実行中)が完了するのを待ちます。
私たちのように最後のセッション:二重引用符内のすべての変数が展開されます。