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.