¿Cómo verifico con un script Bash si se está ejecutando una aplicación?

¿Cómo verifico con un script Bash si se está ejecutando una aplicación?

Tengo una aplicación ejecutada por gnome en mi carpeta de inicio. Ahora agregué la aplicación para que se ejecute cuando presiono Meta+ R(la agregué enCCSM). Ejecuto la aplicación ejecutándola ./gnome-runen mi carpeta de inicio.
No puedo encontrar ningún rastro del proceso de solicitud en el resultado de ps -A.

El problema es que si tengo abierto el programa gnome-run y presiono la combinación de teclas quiero que se cierre la aplicación. ¿Hay alguna manera de crear un archivo bash que verifique si las aplicaciones se están ejecutando? Si es así, ciérrelo; de lo contrario, ejecútelo.

Respuesta1

Este script de shell debe manejar el inicio y la detención de cualquier 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 lo guardó en ~/mystarter, puede ejecutar cualquier comando usando ~/mystarter <name>, por ejemplo, en su caso, vincular Meta+ Ra:

~/mystarter gnome-run

y asegúrese de que el script sea ejecutable: chmod u+x ~/mystarter. Además, probablemente sea mejor colocarlo en algún lugar de su archivo PATH, para no tener que escribir su ubicación completa cada vez.

En cuanto al hecho de que gnome-runeso no aparece en ps -A, asegúrese de que gnome run no sea un script que inicie el proceso real. Compruebe si hay una diferencia entre ps -A | wc -lantes y después de iniciarlo (esto cuenta todos los procesos en ejecución).

Editar:

Dado que aceptó la respuesta, pensé en agregar soporte para ejecutar comandos que tienen argumentos de línea de comandos, para que esto pueda convertirse en un lugar de referencia. Ejecute un comando como este:

 ./mystarter 'cmd args'

p.ej:

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

El comando simplemente mira hacia arriba ncmpcpppara ver si ya se está ejecutando, pero ejecuta el comando completo (con argumentos) cuando ncmpcppno se está ejecutando.

información relacionada