Como verificar se um aplicativo está sendo executado com um script bash

6

Eu tenho o aplicativo gnome-run na minha pasta pessoal. Eu adicionei agora o aplicativo para executar quando eu pressionar Meta + R (adicionei em ccsm). O problema é que se eu tiver o programa gnome-run aberto e eu pressionar a combinação de teclas que eu quero que o aplicativo feche. Existe alguma maneira de criar um arquivo bash que verifica se os aplicativos estão em execução, se é, então, fechá-lo, caso contrário, iniciá-lo.

Eu corro o aplicativo como ./gnome-run na minha pasta pessoal.
Não consigo encontrar o processo de aplicação em ps -A ou qualquer coisa.

Obrigado

    
por richie 01.04.2012 / 19:35

1 resposta

6

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.

    
por 01.04.2012 / 20:53

Tags