Como posso verificar com um script Bash se um aplicativo está em execução?

Como posso verificar com um script Bash se um aplicativo está em execução?

Eu tenho um aplicativo executado pelo gnome na minha pasta pessoal. Agora adicionei o aplicativo para ser executado quando pressiono Meta+ R(adicionei-o emCCSM). Eu executo o aplicativo executando ./gnome-runem minha pasta pessoal.
Não consigo encontrar nenhum vestígio do processo de inscrição na saída do arquivo ps -A.

O problema é que se eu tiver o programa gnome-run aberto e pressionar a combinação de teclas, quero que o aplicativo feche. Existe uma maneira de criar um arquivo bash que verifique se os aplicativos estão em execução? Se estiver, feche-o, caso contrário, inicie-o.

Responder1

Este script de shell deve lidar com o início e a parada 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ê o salvou em ~/mystarter, você pode executar qualquer comando usando ~/mystarter <name>, por exemplo, no seu caso, bind Meta+ Rto:

~/mystarter gnome-run

e certifique-se de que o script seja executável: chmod u+x ~/mystarter. Além disso, provavelmente é melhor colocá-lo em algum lugar do seu arquivo PATH, para que você não precise digitar o local completo todas as vezes.

Quanto ao fato de gnome-runnão aparecer no ps -A, certifique-se de que o gnome run em si não seja um script que inicia o processo real. Verifique se há diferença entre ps -A | wc -lantes e depois de iniciá-lo (isso conta todos os processos em execução).

Editar:

Como você aceitou a resposta, pensei em adicionar suporte para a execução de comandos que possuem argumentos de linha de comando, para que este possa se tornar um local de referência. Execute um comando como este:

 ./mystarter 'cmd args'

por exemplo:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

O comando apenas verifica ncmpcppse já está em execução, mas executa o comando completo (com argumentos) quando ncmpcppnão está em execução.

informação relacionada