Mi respuesta es una variación de la respuesta típica para buscar "foobar" en una pslista. El argumento de "-A" "ps"es más portátil que "aux", creo, pero este cambio es irrelevante para la respuesta. La respuesta típica se ve así:
$ ps -A -ww | grep [f]oobar
En cambio, uso este patrón:
$ ps -A -ww | grep [^]]foobar
La principal ventaja es que es más fácil escribir scripts basados en estos patrones porque simplemente concatena una cadena estática [^]]con cualquier patrón que esté buscando. No necesita quitar la primera letra de la cadena, luego insertarla entre las llaves cuadradas y luego concatenarla nuevamente. Al hacer scripts en shell, es más fácil simplemente pegarse [^]]frente al patrón que estaba buscando. Cortar cadenas en Bash es algo feo, por lo que mi variación lo evita. Esta variación dice mostrar las líneas donde el patrón coincide SIN un corchete derecho]. Dado que el patrón de búsqueda para excluir un corchete en realidad agrega el corchete al patrón, nunca coincidirá.
Entonces podría escribir un psgrepcomando portátil de la siguiente manera. Aquí, considero algunas diferencias entre Linux, OS X BSD y otros. Esto agrega los encabezados de columna de ps, proporciona un más personalizadopsel formato que mejor se adapta a mis necesidades, y muestra procesos que enumeran más, más ancho para que ninguno de los argumentos de la línea de comandos se pierda. Bueno, la mayoría no se pierden. Java es Java, a menudo hace las cosas de la peor manera posible, por lo que algunos servicios de Java superarán la longitud máxima permitida de argumentos de los que la tabla de procesos realizará un seguimiento. Creo que esto es 1024 caracteres. La longitud de comando único permitida para iniciar un proceso es mucho más larga, pero la tabla de proceso del núcleo no se molesta en realizar un seguimiento de nada de más de 1K de longitud. Una vez que se inicia el comando, el nombre del comando y la lista de argumentos no son necesarios, por lo que lo que se almacena en la tabla de procesos es solo informativo.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour.+1 para la respuesta concisa @jamzed, sin embargo, el OP podría necesitar alguna explicación:
Usando esa expresión regular, está iniciando un proceso que su cadena ps no coincidirá, ya que la expresión regular coincide
"django"y no"[d]jango". De esa forma, excluirá el proceso que tiene la cadena "[d] jango", que en este caso es grep; Lo mismo se puede aplicar a pgrep, egrep, awk, sed, etc., cualquier comando que haya utilizado para definir la expresión regular.Desde man 7 regex
fuente
ps aux | grep [s]cript1. ¿Podrías ayudar a comentar sobre la solución?ps | grep [d]jangops | grep d[j]ango...
ps | grep djang[o]fuente
ps aux| grep "[Z] "ps aux | grep [s]cript1ops aux | grep [s]cript2. La línea grep todavía se muestra. ¿Podrías ayudar a comentar sobre la solución?Use pgrep en su lugar:
pgrep -lf djangofuente
pgrepme da exactamente este problema. Pero debo decir que lo estoy probando en CygWin (dondepsno se puede mostrar la línea de comando completa del proceso).pgrepestaba coincidiendo. Resulta que coincidía con el nombre delbasharchivo de script desde el que lo estaba ejecutando. Agregarlo lo-xarregló, luego coincide exactamente con el nombre del comando.Oh espera, esto funciona:
fuente
grep, con lo que no puede contar en el caso general.ps -d | grep djangodel hombre ps:
fuente
psson notoriamente no portátiles, por lo que sin información sobre para qué plataforma es, esta respuesta no es muy útil. Además, esto obviamente no es adecuado cuando no está seguro de que el proceso que está buscando no sea un líder de proceso (es decir, esto puede ayudar si su objetivo es un demonio, pero generalmente no de otra manera).