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.pgrepserí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 conpkilletc.)Nunca lo use
psjunto congrep.Más bien, use
killall netbeans,pkill netbeanspara matarlo. Para la identificación del procesopgrep netbeans.Más sobre ps y grep .
fuente
pgrep,pkilly 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
grepse está ejecutando cuando seps auxejecuta. A medida que seps auxejecuta, su salida se envía a lagrepinstancia en ejecución como entrada. Si el shell aún no se hubiera ejecutadogrep, no aparecería en la salida deps.