Soy un novato en la programación de shell. Suponiendo que he iniciado un programa (por ejemplo, NetBeans) desde mi terminal, si escribo
ps aux|grep netbeans
Me sale la salida
pre 18775 1.2 0.0 12524 1972 pts/3 S 20:17 0:00
donde 18775 especifica el PID, etc. del proceso.
Luego lo mato usando
kill 18775.
sobre el cual desaparece la IU de NetBeans. Si trato de obtener el pid utilizando el primer comando, aún obtengo:
pre 19137 0.0 0.0 9136 1068 pts/3 S+ 20:19 0:00 grep --color=auto netbeans
Si el proceso ha finalizado, ¿por qué sigue mostrando el resultado anterior?
command-line
P Ramesh
fuente
fuente
grep netbeans
, ese es el programa que ves al final de la línea (grep --color=auto netbeans
)Respuestas:
grep es grepping a sí mismo. Intenta algo como:
esto evita que grep se muestre en la salida
fuente
ps aux | grep netbeans | grep -v grep
. Pero use pgrep en su lugar.pgrep
sería bueno, pero solo coincide con el nombre del proceso. El primer patrón puede coincidir con cualquier columna deps
. (Por ejemplo, algo que se ejecuta bajo python o java, pgrep no estaría haciendo lo correcto. Lo mismo conpkill
etc.)Nunca lo use
ps
junto congrep
.Más bien, use
killall netbeans
,pkill netbeans
para matarlo. Para la identificación del procesopgrep netbeans
.Más sobre ps y grep .
fuente
pgrep
,pkill
y así sucesivamente solo con el nombre del proceso de coincidencia; todo lo que se interprete (java, python, bash, etc.) solo se puede distinguir de otros bajo el mismo nombre de proceso mediante el usops
.Porque ese es el PID para el proceso grep que se pone en cola para ejecutarse después
ps aux
.fuente
grep
se está ejecutando cuando seps aux
ejecuta. A medida que seps aux
ejecuta, su salida se envía a lagrep
instancia en ejecución como entrada. Si el shell aún no se hubiera ejecutadogrep
, no aparecería en la salida deps
.