Saludos apoco no les ha pasado que quieren ejecutar un shell en segundo plano y resula que ya lo lanzaron o por ejemplo despliega muchas letras engorrosas en la terminal y demas cosillas que a los principiantes sysadmins o noobsters nos llega a suceder, bueno aqui un pequeño tutorial.
es comun ejecutar scripts en bash y pearl en la terminal Linux para eso nos ayudamos de ./nombredelscript.sh o pl etc...
pero que pasa cuando lo queremos mandar a segundo plano, basicamente disponemos de 2 opciones
./nombredetushell. &
colocar al final el simbolo de " & " manda a segundo plano el comando o script que se desea ejecutar
si queremos evitar que nos lance letras o la salida del comando en la terminal podemos agregar:
nohup ./nombredetushell &
con esto ya no veremos salida en la termina y se ira a segundo plano, pero que pasa cuando queremos ver si sigue en ejecución por que este aun no termina.
podemos usar el comando jobs y con este comando seremos capaz de visualizar una lista de los jobs que se estan ejecutando con un numerito [num] que indica la prioridad con la que se ejecuta el job
[1] running /opt/apache/test.sh
[2]+ running /tmp/shell2.sh > /dev/null
ahora bien supongamos que lo queremos traer a primer plano podemos dar el comando fg para regresar un comando que enviamos a segundo plano a primer plano, de igual forma para enviar el comando nuevamente a segundo plano o bien cualquier otro comando que este en ejecución en primer plano podemos ejecutar ctrl+z para detenerlo y luego el comando bg, al mandarlo a segundo plano en algunas versiones de linux nos regresa el numero de job y el PID vemos un ejemplo:
digamos que yo arranco un shell para ordenar mis mp3 llamado mp3sort.sh
y lo lanzo con ./mp3sort.sh hasta este punto lanzamos la ejecucion pero como tenemos mas cosas que hacer en la terminal y nos es una prioridad, lo mandamos a segundo plano ejecutamos ctrl+z para detenerlo y luego el comando bg .
[2] 2136
jobs
[1] done ./e.sh
[2] running ./mp3sort.sh
Mas tarde nos acordamos que dejamos un shell corriendo y queremos ver en que estatus quedo entonces tecleamos el comando jobs
[1] running ./mp3sort.sh
y vemos que sigue en ejecución, entonces nos damos cuenta de que ya lleva mucho tiempo y no funciona o estaba en prueba, entonces lo queremos matar aqui hay de 2 le damos un kill -9 y el pid
en este caso kill -9 2136 para matar el job o bien kill %1 que es el número de job.
entonces ya disponemos de varias opciones para iniciar el job y mandarlo a segundo plano desde un inicio o bien detenerlo y mandarlo a background mode (segundo plano)
haber ahi les va un ejemplo mas complicado
<<<<<<<<<<<<<
Matar varios procesos y tareas especificas
>>>>>>>>>>>>>>>
ps -fea |grep root| egrep -v "license|samba" | awk '{print $2}' | xargs -I {} kill -9 {}
vamos a desglozar el comando de mas arriba, recuerda que " | " es una tuberia y redirige la salida del primer comando al seguiente, quiza no es el modo mas elegante de hacerlo, pero es un buen ejemplo de tuberias ;-), vamos!!
sacamos
todos los procesos (ps -fea), depuramos con grep al usuario root y con egrep
buscamos las palabras que contengan smbd y samba, con awk solo dejamos
el PID del proceso, con xargs cachamos la lista de procesos y
la ponemos en un array{} y a todos esos PID les damos un kill -9 {}
las llaves es para indicar el array :-)
algo mas elegante es utilizar el comando pgrep -u myusuario o bien el pkill -u myusuario, tanto pgrep como pkill tienen varias opciones mas para buscar procesos o matarlos.
a la espera de sus comentarios y espero les sirva.
No hay comentarios.:
Publicar un comentario