Todos los procesos se enumerarán en la salida de ps aux
; ya sea corriendo, durmiendo, zombie o parado.
Sin embargo, en su caso, dado que ejecutó el proceso usando sh abc.sh
, sh
es la aplicación (shell) la que se está ejecutando y no abc.sh
. Por lo tanto, ps aux
no contendrá el proceso abc.sh
debido a que grep
no podría dar ningún resultado.
Entonces, la forma correcta en que debería haberlo usado es como:
ps aux | grep sh
Esto también puede devolverle otro proceso que se está ejecutando con la cadena sh
en cualquier lugar de su salida de ps aux
.
Debe tener en cuenta que el proceso se "ejecutará" cuando la salida de ps aux
tenga su STAT
como R
. Si es algo diferente a eso, no se está ejecutando en la instancia en la que activó el comando para verificar los procesos en ejecución. Los diferentes estados del proceso se pueden encontrar en la página del manual para ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
También podría ejecutar el top
comando para verificar si el proceso se está ejecutando o inactivo y la cantidad de CPU, RAM que está consumiendo. (Esto volverá a enumerar su proceso como sh
).
Sin embargo, si desea que su proceso aparezca en la lista abc.sh
, entonces debe tener la primera línea del script que está ejecutando como:
#!/bin/sh
para que el shell sepa qué aplicación usar para ejecutar el script (sh en este caso, cámbielo a #!/bin/bash
bash) y luego proporcionará permisos ejecutables para el proceso usando:
chmod +x /path/to/abc.sh
reemplazar /path/to/
con la ubicación del abc.sh
archivo y luego ejecutar abc.sh
usando
/path/to/abc.sh
nuevamente reemplazando /path/to/
con la ubicación del abc.sh
archivo.
S+
significa estadística?ps aux | grep filename
comando.Mi problema
grep
es que es un analizador de línea completa. En su ejemplo, está buscando "abc" pero está retirando la instancia degrep
(que está buscando "abc"). Un poco circular. Puedes filtrar eso, pero me parece un poco perverso.Me gustaría recurrir a
awk
un poco de garbo.awk
divide las líneas en campos basados en espacios en blanco (por defecto). Los campos $ 11 + son la (s) columna (s) de comando, por lo que si el comando es "sh abc.sh ...",$11
serásh
y$12
seráabc.sh
.Si desea controlar la salida o la cadena con Bash
&&
y||
operadores, puede hacerlo, pero deberá ser un poco más inteligente.grep
saldrá con el código de estado 1 (falla técnica, disparadores||
) si no se encuentra nada, peroawk
siempre saldrá del código 0. Podemos cambiar esto diciéndole que salga si encuentra algo y arroje un 1 si no lo hace:Por supuesto, si solo le interesa escribir la salida en la pantalla, puede hacerlo todo en
awk
:fuente
La forma correcta de verificar en la sesión bash actual si un proceso iniciado en segundo plano, como si
sh abc.sh &
ya se está ejecutando o no, es usar eljobs
comando incorporado.Ejemplo:
Eso significa que el
sh abc.sh
proceso iniciado en segundo plano se está ejecutando. Si el proceso ha terminado, verá algo como:Si tiene más procesos ejecutándose en segundo plano, puede restringir la salida solo al
sh abc.sh
proceso mediante:Ver
help jobs
para más información.El método anterior solo funcionará en la sesión actual de bash. Pero si está en otra sesión de bash (por ejemplo, en otra ventana o pestaña de terminal, o en un script), aparte de:
puedes usar también:
lo cual me parece más simple. Si verá su comando escrito en la salida (
sh abc.sh
en este caso), eso significa que el proceso aún se está ejecutando. Si no, el proceso ha terminado.fuente
Si su script se está ejecutando actualmente, debe mostrarse por
ps aux
comando. Si no se muestraps
, entonces puede que la ejecución de su script finalice actualmente.La salida de
ps
este tipo significa que su script no se está ejecutando actualmente,Si se muestra así, lo que significa que su script se está ejecutando actualmente.
Todo se basa en el contenido del guión.
Por ejemplo, si crea un script como este. Muestra el mensaje HI en la ejecución. Se tarda unos segundos en mostrar la salida y se termina después de que produce el resultado final.
Pero si tu guión es así,
Lleva algunos minutos terminar el proceso. Mientras tanto, si ejecuta el
ps aux | grep filename
comando, se mostrará en la salida. Porque el script se está ejecutando actualmente.fuente
si desea verificar todos los procesos, use 'top'
si desea conocer los procesos ejecutados por java, use
ps -ef | grep java
si otro proceso, entonces simplemente use
ps -ef | grep xyz
o simplemente/etc/init.d xyz status
si a través de cualquier código como
.sh
entonces./xyz.sh status
fuente
si simplemente desea verificar si hay alguno en proceso, vaya a ese directorio y escriba
ll -tr
si ve.csv
o.work
etc. al final del archivo, entonces significa que no está en proceso.fuente
.csv
es para archivos delimitados por comas que no están relacionados con un proceso en ejecución.