Control+C またはその他のコマンドを使用してスクリプトプロセスを停止します。

Control+C またはその他のコマンドを使用してスクリプトプロセスを停止します。

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 pidpidその番号に置き換えます)。

&通常、呼び出しはsoxバックグラウンドに配置されます。このバックグラウンドジョブのPIDは自動的に保存され、上記の$!コードはsox_pid後で印刷するように割り当てられます。

このwaitコマンドは、soxコマンド(バックグラウンドで実行中)が完了するのを待ちます。


私たちのように最後のセッション:二重引用符内のすべての変数が展開されます。

おすすめ記事