Seu pipeline
ps -aux | grep sox | kill 0
não fará o que você deseja fazer. Isso ocorre porque kill
nunca lerá a entrada de grep
(o resultado de grep
também conterá muito de outras coisas além do PID do processo sox
) .
Se você tiver pkill
, faça
pkill sox
em vez disso (use pkill -INT sox
para enviar o mesmo sinal que Ctrl + C ).
Se você alterar seu script de inicialização para
#!/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"
Você obterá o PID do processo sox
impresso no terminal e poderá usá-lo para fazer kill pid
(com pid
substituído por esse número).
Usando &
ofte, a invocação de sox
a coloca em segundo plano. O PID dessa tarefa em segundo plano é armazenado automaticamente em $!
e o código acima atribui a sox_pid
, que é posteriormente impresso.
O comando wait
aguarda que o comando sox
(executando em segundo plano) termine.
Como discutimos em uma sessão anterior : cite duas expansões de variáveis.