Este script de shell deve lidar com o início e a interrupção de qualquer programa:
#!/bin/bash
BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
echo "at least one instance of "$BASECMD" found, killing all instances"
kill $PID
else
echo "no running instances of "$BASECMD" found, starting one"
$1
fi
digamos que você salvou em ~/mystarter
, você pode executar qualquer comando com ele usando ~/mystarter <name>
, por exemplo, no seu caso, ligue Meta + R para:
~/mystarter gnome-run
e verifique se o script é executável: chmod u+x ~/mystarter
. Também é provavelmente melhor colocá-lo em algum lugar no seu PATH
, para que você não precise digitar sempre o local completo.
Quanto ao fato de que gnome-run
não aparece em ps -A
, certifique-se de que o próprio gnome não seja um script que inicie o processo real. Verifique se há uma diferença entre ps -A | wc -l
antes e depois de lançá-lo (isso conta todos os processos em execução).
Editar:
Como você aceitou a resposta, pensei em adicionar suporte para executar comandos com argumentos de linha de comando, para que isso possa se tornar um local de referência. Execute um comando assim:
./mystarter 'cmd args'
por exemplo:
./mystarter 'ncmpcpp -c ~/.ncmpcpp'
O comando apenas procura ncmpcpp
para ver se já está executando, mas executa o comando completo (com argumentos) quando ncmpcpp
não estava em execução.