Mostrando entradas con la etiqueta Procesos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Procesos. Mostrar todas las entradas

Información del proceso - abg-aceh.exe

Archivo: abg-aceh.exe
Nombre: Trojan.W32.Boetac

Información General

Autor: unknown
Parte de: Trojan.W32.Boetac
Common path: C:\ABG-Aceh.exe

Seguridad

Riesgo de seguridad: 4
Spyware: No
Adware: No
Virus: Si
Trojan: Si

Propiedades

Uso de memoria: N/A
Proceso de sistema: No
Aplicacion: No
Proceso en segundo plano: Si
Red: Si
Internet: Si

Descripción

el abg-aceh.exe es un process que se coloca como Trojan. el Este Trojan permite que los atacantes tengan acceso a su ordenador de las posiciones remotas, robando palabras de paso, actividades bancarias del Internet y datos personales. el Este proceso es un riesgo para la seguridad y se debe quitar de su sistema.

Recomendación

Inhabilitar y quitar abg-aceh.exe INMEDIATAMENTE. Este proceso es más probable un virus o un Trojan.. Se recomienda altamente a Funcionar una exploración libre del funcionamiento optimizar automáticamente memoria, ajustes de la CPU y del Internet.

Fuente: http://www.infoprocesos.com/proceso/abg-aceh.exe.html & http://www.processlibrary.com/es/directory/files/abg-aceh/

MANUAL BÁSICO DE CRON

Copyright 2005-2008 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

autor: sergio.gonzalez.duran@gmail.com



¿Qué es cron?

Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automáticamente comandos o scripts (grupos de comandos) a una hora o fecha específica. Es usado normalmente para comandos de tareas administrativas, como respaldos, pero puede ser usado para ejecutar cualquier cosa. Como se define en las páginas del manual de cron (#> man cron) es un demonio que ejecuta programas agendados.

En prácticamente todas las distribuciones de Linux se usa la versión Vixie Cron, por la persona que la desarrolló, que es Paul Vixie, uno de los grandes gurús de Unix, también creador, entre otros sistemas, de BIND que es uno de los servidores DNS más populares del mundo.


Iniciar cron

Cron es un demonio (servicio), lo que significa que solo requiere ser iniciado una vez, generalmente con el mismo arranque del sistema. El servicio de cron se llama crond. En la mayoría de las distribuciones el servicio se instala automáticamente y queda iniciado desde el arranque del sistema, se puede comprobar de varias maneras:

#> /etc/rc.d/init.d/crond status
#> /etc/init.d/crond status Usa cualquiera de los dos dependiendo de tu distro
crond (pid 507) is running...

o si tienes el comando service instalado:
#> service crond status
crond (pid 507) is running...

se puede también revisar a través del comando ps:
# ps -ef | grep crond

si por alguna razón, cron no esta funcionando:
#> /etc/rc.d/init.d/crond start
Starting crond: [ OK ]

Si el servicio no estuviera configurado para arrancar desde un principio, bastaría con agregarlo con el comando chkconfig:

#> chkconfig --level 35 crond on

Usando cron

Hay al menos dos maneras distintas de usar cron:

La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios:

  • cron.hourly
  • cron.daily
  • cron.weekly
  • cron.monthly

Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio.

Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:

 #!/bin/sh
#script que genera un respaldo
cd /usr/documentos
tar czf * respaldo
cp respaldo /otra_directorio/.

Nótese que la primera línea empieza con #!, que indica que se trata de un script shell de bash, las demás líneas son los comandos que deseamos ejecute el script. Este script podría nombrarse por ejemplo respaldo.sh y también debemos cambiarle los permisos correspondientes para que pueda ser ejecutado, por ejemplo:

#> chmod 700 respaldo.sh
#> ls -l respaldo.sh
-rwx------ 1 root root 0 Jul 20 09:30 respaldo.sh

La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.

Si este script lo dejamos en cron.hourly, entonces se ejecutará cada hora con un minuto de todos los días, en un momento se entenderá el porque.


Como segundo modo de ejecutar o usar cron es a través de manipular directamente el archivo /etc/crontab. En la instalación por defecto de varias distribuciones Linux, este archivo se verá a algo como lo siguiente:

#> cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Las primeras cuatro líneas son variables que indican lo siguiente:

SHELL es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomará por defecto el indicado en la línea /etc/passwd correspondiente al usuario que este ejecutando cron.

PATH contiene o indica la ruta a los directorios en los cuales cron buscará el comando a ejecutar. Este path es distinto al path global del sistema o del usuario.

MAIL TO es a quien se le envía la salida del comando (si es que este tiene alguna salida). Cron enviará un correo a quien se especifique en este variable, es decir, debe ser un usuario válido del sistema o de algún otro sistema. Si no se especifica, entonces cron enviará el correo al usuario propietario del comando que se ejecuta.

HOME es el directorio raíz o principal del comando cron, si no se indica entonces, la raíz será la que se indique en el archivo /etc/passwd correspondiente al usuario que ejecuta cron.

Los comentarios se indican con # al inicio de la línea.

Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. No hay límites de cuantas tareas pueda haber, una por renglón. Los campos (son 7) que forman estas líneas están formados de la siguiente manera:

Minuto Hora DiaDelMes Mes DiaDeLaSemana Usuario Comando
CampoDescripción
MinutoControla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59.
HoraControla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es medianoche.
Día del MesDía del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 20, para ejecutar el comando el día 20 del mes.
MesMes en que el comando se ejecutará, puede ser indicado numéricamente (1-12), o por el nombre del mes en inglés, solo las tres primeras letras.
Día de la semanaDía en la semana en que se ejecutará el comando, puede ser numérico (0-7) o por el nombre del día en inglés, solo las tres primeras letras. (0 y 7 = domingo)
UsuarioUsuario que ejecuta el comando.
ComandoComando, script o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios.

Un asterisco * como valor en los primeros cinco campos, indicará inicio-fin del campo, es decir todo. Un * en el campo de minuto indicará todos los minutos.

Para entender bien esto de los primeros 5 campos y el asterisco usaré mejor varios ejemplos:

EjemploDescripción
01 * * * *Se ejecuta al minuto 1 de cada hora de todos los días
15 8 * * * A las 8:15 a.m. de cada día
15 20 * * *A las 8:15 p.m. de cada día
00 5 * * 0A las 5 a.m. todos los domingos
* 5 * * SunCada minuto de 5:00a.m. a 5:59a.m. todos los domingos
45 19 1 * *A las 7:45 p.m. del primero de cada mes
01 * 20 7 *Al minuto 1 de cada hora del 20 de julio
10 1 * 12 1A la 1:10 a.m. todos los lunes de diciembre
00 12 16 * WenAl mediodía de los días 16 de cada mes y que sea Miércoles
30 9 20 7 4A las 9:30 a.m. del dia 20 de julio y que sea jueves
30 9 20 7 *A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana
20 * * * 6Al minuto 20 de cada hora de los sábados
20 * * 1 6Al minuto 20 de cada hora de los sábados de enero

También es posible especificar listas en los campos. Las listas pueden estar en la forma de 1,2,3,4 o en la forma de 1-4 que sería lo mismo. Cron, de igual manera soporta incrementos en las listas, que se indican de la siguiente manera:

Valor o lista/incremento
De nuevo, es más fácil entender las listas e incrementos con ejemplos:
EjemploDescripción
59 11 * 1-3 1,2,3,4,5A las 11:59 a.m. de lunes a viernes, de enero a marzo
45 * 10-25 * 6-7Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo
10,30,50 * * * 1,3,5En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes
*/15 10-14 * * *Cada quince minutos de las 10:00a.m. a las 2:00p.m.
* 12 1-10/2 2,8 *Todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero a agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)
0 */5 1-10,15,20-23 * 3Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles
3/3 2/4 2 2 2Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes

Como se puede apreciar en el último ejemplo la tarea cron que estuviera asignada a ese renglón con esos datos, solo se ejecutaría si se cumple con los 5 campos (AND). Es decir, para que la tarea se ejecute tiene que ser un martes 2 de febrero a las 02:03. Siempre es un AND booleano que solo resulta verdadero si los 5 campos son ciertos en el minuto específico.

El caso anterior deja claro entonces que:

El programa cron se invoca cada minuto y ejecuta las tareas que sus campos se cumplan en ese preciso minuto.

Incluyendo el campo del usuario y el comando, los renglones de crontab podrían quedar entonces de la siguiente manera:

0 22 * * * root /usr/respaldodiario.sh
0 23 * * 5 root /usr/respaldosemanal.sh
0 8,20 * * * sergio mail -s "sistema funcionando" sgd@ejemplo.com

Las dos primeras líneas las ejecuta el usuario root y la primera ejecuta a las 10 de la noche de todos los días el script que genera un respaldo diario. La seguna ejecuta a las 11 de la noche de todos los viernes un script que genera un respaldo semana. La tercera línea la ejecuta el usuario sergio y se ejecutaría a las 8 de la mañana y 8 de la noche de todos los día y el comando es enviar un correo a la cuenta sgd@ejemplo.com con el asunto "sistema funcionando", una manera de que un administrador este enterado de que un sistema remoto esta activo en las horas indicadas, sino recibe un correo en esas horas, algo anda mal.

Siendo root, es posible entonces, modificar directamente crontab:

#> vi /etc/crontab

Ejecutando Cron con múltiples usuarios, comando crontab

Linux es un sistema multiusuario y cron es de las aplicaciones que soporta el trabajo con varios usuarios a la vez. Cada usuario puede tener su propio archivo crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, aunque no hay problema que se incluyan otros usuarios, y de ahí el sexto campo que indica precisamente quien es el usuario que ejecuta la tarea y es obligatorio en /etc/crontab.

Pero cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab, entonces utilizaremos el comando crontab.

En el directorio /var/spool/cron (puede variar según la distribución), se genera un archivo cron para cada usuario, este archivo aunque es de texto, no debe editarse directamente.

Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando:

$> crontab -e
Con lo cual se abrira el editor por default (generalemente vi) con el archivo llamado crontab vacio y donde el usuario ingresará su tabla de tareas y que se guardará automáticamente como /var/spool/cron/usuario.

El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y como ejemplo lo nombre 'mi_cron', después el comando $> crontab mi_cron se encargará de establecerlo como su archivo cron del usuario en /var/spool/cron/usuario:

$> vi mi_cron
# borra archivos de carpeta compartida
0 20 * * * rm -f /home/sergio/compartidos/*
# ejecuta un script que realiza un respaldo de la carpeta documentos el primer día
de cada mes
0 22 1 * * /home/sergio/respaldomensual.sh
# cada 5 horas de lun a vie, se asegura que los permisos sean los correctos en mi
home
1 *5 * * * 1-5 chmod -R 640 /home/sergio/*
:wq (se guarda el archivo)
$> ls
gt; ls
gt; ls
mi_cron
$> crontab mi_cron
gt; crontab mi_cron
gt; crontab mi_cron
(se establece en /var/spool/cron/usuario)

Resumiendo lo anterior y considerando otras opciones de crontab:

$> crontab archivo.cron gt; crontab archivo.cron gt; crontab archivo.cron (establecerá el archivo.cron como el crontab del usuario)
$> crontab -e gt; crontab -e gt; crontab -e (abrirá el editor preestablecido donde se podrá crear o
editar el archivo crontab)

$> crontab -l gt; crontab -l gt; crontab -l (lista el crontab actual del usuario, sus tareas de cron)
$> crontab -r gt; crontab -r gt; crontab -r (elimina el crontab actual del usuario)

En algunas distribuciones cuando se editan crontabs de usuarios normales es necesario reiniciar el servicio para que se puedan releer los archivos de crontab en /var/spool/cron.

#> service crond restart

Para entender mejor como iniciar/detener/reiniciar servicios, en este artículo encontrarás más información.


Controlando el acceso a cron

Cron permite controlar que usuarios pueden o no pueden usar los servicios de cron. Esto se logra de una manera muy sencilla a través de los siguientes archivos:

  • /etc/cron.allow
  • /etc/cron.deny

Para impedir que un usuario utilice cron o mejor dicho el comando crontab, basta con agregar su nombre de usuario al archivo /etc/cron.deny, para permitirle su uso entonces sería agregar su nombre de usuario en /etc/cron.allow, si por alguna razón se desea negar el uso de cron a todos los usuarios, entonces se puede escribir la palabra ALL al inicio de cron.deny y con eso bastaría.

#> echo ALL >>/etc/cron.deny
o para agregar un usuario mas a cron.allow
#> echo juan >>/etc/cron.allow

Si no existe el archivo cron.allow ni el archivo cron.deny, en teoría el uso de cron esta entonces sin restricciones de usuario. Si se añaden nombres de usuarios en cron.allow, sin crear un archivo cron.deny, tendrá el mismo efecto que haberlo creado con la palabra ALL. Esto quiere decir que una vez creado cron.allow con un solo usuario, siempre se tendrán que especificar los demás usuarios que se quiere usen cron, en este archivo.

Fuente: http://www.linuxtotal.com.mx/index.php?cont=info_admon_006

MANUAL BÁSICO DE ADMINISTRACIÓN DE PROCESOS

La más simple definición de un proceso podría ser que es una instancia de un programa en ejecución (corriendo). A los procesos frecuentemente se les refiere como tareas. El contexto de un programa que esta en ejecución es lo que se llama un proceso. Este contexto puede ser mas procesos hijos que se hayan generado del principal (proceso padre), los recursos del sistema que este consumiendo, sus atributos de seguridad (tales como su propietario y permisos de archivos asi como roles y demás de SELinux), etc.

Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada proceso tiene la "ilusión" que es el único proceso en el sistema y que tiene acceso exclusivo a todos los servicios del sistema operativo.

Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples instancias de un programa pueden ejecutarse sumultáneamente. Cada instancia es un proceso separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo, habría cinco instancias del mismo programa, es decir, cinco procesos distintos.

Cada proceso que se inicia es referenciado con un número de identificación único conocido como Process ID PID, que es siempre un entero positivo. Prácticamente todo lo que se está ejecutando en el sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente gráfico que puede tener múltiples procesos, etc. La excepción a lo anterior es el kernel en si, el cual es un conjunto de rutinas que residen en memoria y a los cuales los procesos a través de llamadas al sistema pueden tener acceso.


ps

El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el sistema de archivos /proc, es decir, lee directamente la información de los archivos que se encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso de ps son las siguientes:

  • Estilo UNIX, donde las opciones van precedidas por un guión -
  • Estilo BSD, donde las opciones no llevan guión
  • Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión --

Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas se mostrarán en el listado de procesos que resulte, estas columnas pueden ser entre muchas otras, las siguientes (y principales):

p o PID
Process ID, número único o de identificación del proceso.
P o PPID
Parent Process ID, padre del proceso
U o UID
User ID, usuario propietario del proceso
t o TT o TTY
Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
T o TIME
Tiempo de uso de cpu acumulado por el proceso
c o CMD
El nombre del programa o camndo que inició el proceso
RSS
Resident Sise, tamaño de la parte residente en memoria en kilobytes
SZ o SIZE
Tamaño virtual de la imagen del proceso
NI
Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo de procesador y negativo más tiempo (-19 a 19)
C o PCPU
Porcentaje de cpu utilizado por el proceso
STIME
Starting Time, hora de inicio del proceso
S o STAT
Status del proceso, estos pueden ser los siguientes
  • R runnable, en ejecución, corriendo o ejecutándose
  • S sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por algún evento para continuar
  • T sTopped, proceso detenido totalmente, pero puede ser reiniciado
  • Z zombie, difunto, proceso que por alguna razón no terminó de manera correcta, no debe haber procesos zombies
  • D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema
  • X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no deberían verse nunca

Las opciones completas de ps las encuentras en las páginas del manual (man ps), o escribiendo en la terminal ps L, y para ver un resumen de sus opciones más comunes usa ps --help:

#> ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy

A continuación algunos cuantos ejemplos de ps con la salida recortada.

># ps -e    (-e muestra todos los procesos)
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0

#> ps -ef (-f muestra opciones completas)
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:12 ? 00:00:01 init [5]
root 2 0 0 10:12 ? 00:00:00 [kthreadd]
...
root 6130 5662 0 10:24 pts/0 00:00:00 su -
root 6134 6130 0 10:24 pts/0 00:00:00 -bash
sergon 6343 5604 0 10:28 ? 00:00:00 kio_file [kdeinit] file /home
/sergon/tmp/ksocket-sergon/kl
root 6475 6134 0 10:38 pts/0 00:00:00 ps -ef

#> ps -eF (-F muestra opciones completas extra)
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 412 556 1 16:59 ? 00:00:01 init [5]
root 2 0 0 0 0 1 16:59 ? 00:00:00 [kthreadd]
sergon 8326 8321 0 902 1272 0 17:07 ? 00:00:00 /bin/sh /usr/lib
/firefox-2.0.0.8/
run-mozilla.sh /
usr/lib/f
sergon 8331 8326 4 53856 62604 0 17:07 ? 00:00:50 /usr/lib/
firefox-2.0.0.8/
mozilla-firefox-bin
sergon 8570 7726 2 15211 37948 0 17:17 ? 00:00:10 quanta

#> ps ax (formato BSD sin guión, a muestra todos, x sin mostrar tty)
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 init [5]
2 ? S<> ps aux (formato BSD sin guión, u muestra usuarios y demás columnas)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1648 556 ? Ss 16:59 0:01 init [5]
root 2 0.0 0.0 0 0 ? S<> ps -eo user,pid,tty (-o output personalizado, se indican los campos
separados por coma, ver ps --help o ps L)

USER PID TT
root 1 ?
root 2 ?
sergon 8570 tty 1
root 8876 pts/1

#> ps -eH (muestra árbol de procesos)
#> ps axf (lo mismo en formato BSD)
#> ps -ec (el comando que se esta ejecutando, sin la ruta, solo el nombre real)
#> ps -el (muestra formato largo de varias columnas, muy práctico)
#> ps L (No muestra procesos, lista todos los códigos de formatos)

pstree

Muestra los procesos en forma de árbol, pstree --help te da las opciones más comunes. Recomiendo uses lo uses con la opción -A y -G para que te un árbol con líneas con líneas estilo ASCII y de terminal VT100 respectivamente, puedes añadir también -u para mostrar entre paréntesis al usuario propietario del proceso:

#> pstree -AGu
init---acpid
|-atd(daemon)
|-automount----2*[{automount}]
|-avahi-daemon(avahi)
|-beagled(sergon)----7*[{beagled}]
|-beagled-helper(sergio)----3*[{beagled-helper}]
|-compiz(sergon)----kde-window-deco
|-console-kit-dae----61*[{console-kit-dae}]
|-crond
|-dbus-daemon(messagebus)
|-dbus-daemon(sergio)
|-dbus-launch(sergio)
|-dcopserver(sergio)
|-dhclient
|-gam_server(sergio)
|-gconfd-2(sergio)
|-hald(haldaemon)----hald-runner(root)----hald-addon-acpi(haldaemon)
| |-hald-addon-cpuf
| |-hald-addon-inpu
| |-hald-addon-stor
|-httpd---8*[httpd(apache)]
|-2*[ifplugd]
|-ipw3945d
|-kaccess(sergio)
...

kill

El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar procesos sino principalmente para enviar señales (signals) a los procesos. La señal por default (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID el número de ID del proceso. Asi por ejemplo, es posible enviar una señal de STOP al proceso y se detendrá su ejecución, después cuando se quiera mandar una señal de CONTinuar y el proceso continuara desde donde se quedo.

#> kill -l     (lista todas las posibles señales que pueden enviarse a un proceso)
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

La lista previa presenta una lista de todas las posibles señales que pueden mandarse a un proceso y estas pueden ser invocadas a través del número de la señal o de su código, por ejemplo:

#> kill -9 11428        (termina, mata un proceso completamente)
#> kill -SIGKILL 11428 (Lo mismo que lo anterior)

Las señales más comunes son la 19 y 20 que detienen momentáneamente la ejecución de un proceso o programa, 18 la continua, 1 que es la señal de hang up que obliga al proceso a releer sus archivos de configuración estando en ejecución y 9 que termina rotundamente un proceso.


killall

El comando killall, que funciona de manera similar a kill, pero con la diferencia de en vez de indicar un PID se indica el nombre del programa, lo que afectará a todos los procesos que tengan ese nombre. Asi por ejemplo si se tienen varias instancias ejecutándose del proxy server squid, con killall squid eliminará todos los procesos que se esten ejecutando con el nombre 'squid'

#> killall -l             (lista de posibles señales)
#> killall -HUP httpd (manda una señal de "colgar", detenerse releer sus
archivos de configuración y reiniciar)

#> killall -KILL -i squid (manda señal de matar a todos los procesos squid pero
pide confirmación en cada uno)

nice

Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa (proceso) con la prioridad modificada, más alta o más baja según se requiera. Las prioridades van de -20 (la más alta) a 19 la más baja. Solo root o el superusuario puede establecer prioridades negativas que son más altas. Con la opción -l de ps es posible observar la columna NI que muestra este valor.

#> nice             (sin argumentos, devuelve la prioridad por defecto )
0
#> nice -n -5 comando (inicia comando con una prioridad de -5, lo que le da más
tiempo de cpu)

renice

Asi como nice establece la prioridad de un proceso cuando se incia su ejecución, renice permite alterarla en tiempo real, sin necesidad de detener el proceso.

#> nice -n -5 yes   (se ejecuta el programa 'yes' con prioridad -5)
(dejar ejecutando 'yes' y en otra terminal se analiza con 'ps')
#> ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12826 12208 4 75 -5 - 708 write_ pts/2 00:00:00 yes

#> renice 7 12826
12826: prioridad antigua -5, nueva prioridad 7
#> ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12826 12208 4 87 7 - 708 write_ pts/2 00:00:15 yes

(obsérvese el campo NI en el primer caso en -5, y en el segundo con renice quedó en
7, en tiempo real)

nohup y &

Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando nohup o el operador &. Aunque realizan una función similar, no son lo mismo.

Si se desea liberar la terminal de un programa que se espera durará un tiempo considerable ejecutándose, entonces se usa . Esto funciona mejor cuando el resultado del proceso no es necesario mandarlo a la salida estándar (stdin), como por ejemplo cuando se ejecuta un respaldo o se abre un programa Xwindow desde la consola o terminal. Para lograr esto basta con escribir el comando en cuestión y agregar al final el símbolo & (ampersand).

$> yes > /dev/null &
$> tar czf respaldo /documentos/* > /dev/null/ &
$> konqueror & gt; konqueror & gt; konqueror & (con estos ejemplos se ejecuta el comando y se libera la terminal
regresando el prompt)

Sin embargo lo anterior produce que el padre del proceso PPID que se invocó con sea el proceso de la terminal en si, por lo que si cerramos la terminal o salimos de la sesión también se terminaran los procesos hijos que dependan de la terminal, no muy conveniente si se desea que el proceso continué en ejecución.

Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&' mandar el proceso y background y que este quede inmune a los hangups (de ahí su nombre nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecutó el proceso.

$> nohup yes > /dev/null &
$> nohup czf respaldo /documentos/* > /dev/null/
$> nohup konqueror

Asi se evita que el proceso se "cuelgue" al cerrar la consola.


jobs

Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió previamente con nohup y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la terminal y continuar trabajando.

Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eos tenemos el comando jobs que lista los procesos actuales en ejecución:

#> yes > /dev/null &
[1] 26837
#> ls -laR > archivos.txt &
[2] 26854
#> jobs
[1]- Running yes >/dev/null &
[2]+ Running ls --color=tty -laR / >archivos.txt &

En el ejemplo previo, se ejecutó el comando yes y se envió a background (&) y el sistema devolvió [1] 26837, indicando asi que se trata del trabajo o de la tarea [1] y su PID, lo mismo con la segunda tarea que es un listado recursivo desde la raíz y enviado a un archivo, esta es la segunda tarea.

Con los comandos fg (foreground) y bg background es posible manipular procesos que esten suspendidos temporalmente, ya sea porque se les envió una señal de suspensión como STOP (20) o porque al estarlos ejecutando se presionó ctrl-Z. Entonces para reanudar su ejecución en primer plano usaríamos fg:

#> jobs
[1]- Stopped yes >/dev/null &
[2]+ Stopped ls --color=tty -laR / >archivos.txt &
#> fg %1
#> jobs
[1]+ Running yes >/dev/null &
[2]- Stopped ls --color=tty -laR / >archivos.txt &

Obsérvese como al traer en primer plano al 'job' o proceso 1, este adquirió el símbolo [+] que indica que esta al frente. Lo mismo sería con bg que volvería a reinicar el proceso pero en segundo plano. Y también es posible matar los procesos con kill indicando el número que devuelve jobs: kill %1, terminaría con el proceso en jobs número 1.


top

Una utilería muy usada y muy útil para el monitoreo en tiempo real del estado de los procesos y de otras variantes del sistema es el programa llamado top, se ejecuta desde la línea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.

$> top
top - 13:07:30 up 8 days, 6:44, 4 users, load average: 0.11, 0.08, 0.08
Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 497356k total, 472352k used, 25004k free, 21500k buffers
Swap: 1156640k total, 257088k used, 899552k free, 60420k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26156 sergon 15 0 2160 1016 784 R 1 0.2 0:00.93 top
1 root 15 0 2012 616 584 S 0 0.1 0:00.98 init
2 root RT 0 0 0 0 S 0 0.0 0:00.29 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
5 root RT 0 0 0 0 S 0 0.0 0:00.38 migration/1
...

Estando adentro de la apliación, presionando 'h' muestra una ayuda de los posibles comandos que permiten configurar top, por ejemplo, al presionar 's' pregunta por el tiempo en segundos de actualización, etc.


Estas son algunas de las herramientas, las más importantes y usadas, para adminsitrar procesos, hay varios programas en ambientes gráficos que en una sola pantalla permiten todo lo anterior y más, y en línea de comandos te recomiendo htop, que es como un top pero en esteroides.


Copyright 2005-2008 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

autor: sergio.gonzalez.duran@gmail.com

Fuente: http://www.linuxtotal.com.mx/index.php?cont=info_admon_012

Manejo de Procesos

Un proceso es un programa o servicio normalmente en estado de ejecución o que esta siendo utilizado por Ubuntu. Por ejemplo, si estas navegando con Firefox, tendrás un proceso en ejecución en el mismo momento en tu sistema.

Mostrando los procesos

Para ver los procesos y sus estados existen diversas aplicaciones.


Mediante interface gráfica: gnome-system-monitor

Fig.1 Monitor del sistema (pestaña Servicios)
Aumentar
Fig.1 Monitor del sistema (pestaña Servicios)

Es una utilidad de gnome que muestra los procesos y permite monitorizar el estado del sistema. Para ejecutar la aplicación hay que ir a Sistema -> Administración -> Monitor del sistema o basta con introducir en el terminal:

$ sudo gnome-system-monitor

En consola o Terminal


El comando top

Es el equivalente al Monitor del sistema en la línea de comandos. Muestra una lista de procesos que se pueden ordenar de diferentes formas.

$ sudo top

Permite realizar diferentes acciones sobre cada uno de ellos como matarlo o cambiar su prioridad. Para más información leer la página del manual de top.


El comando ps

El comando ps es el mejor modo de mostrar los procesos que se encuentran activos. Para ver todos los procesos activos con todos los detalles basta con abrir un terminal y teclear:

$ sudo ps -AF

Esto mostrará un listado con la siguiente información:

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD

Otra forma de listarlos es mediante:

$ sudo ps -AL

Para más información, leer la página del manual.


Finalizar un proceso

Imagen:Nota advertencia.png Finalizar un proceso activo puede llevar a pérdidas de información y/o a la inestabilidad del sistema si no se conoce el proceso que se finaliza.

Utilizando el monitor del sistema.

Basta con ir a la pestaña de procesos, seleccionar el proceso a finalizar y presionar el botón: finalizar proceso.



En consola o Terminal utilizando el comando kill y killall.

Para finalizar un proceso mediante la consola, es preciso conocer el número de identificación del proceso (PID). Para conocer el número basta con listar los procesos.

Listados los procesos, buscar el proceso a finalizar y memorizar el número de la columna PID.

Una vez conocido el PID basta con ejecutar en un terminal:

$ sudo kill [PID]

Es conveniente comprobar que el proceso ha finalizado y ya no se encuentra en ejecución.

Puede suceder en ocasiones que algún proceso no finalice luego de haber ejecutado kill. En estos casos se puede intentar finalizarlos con el comando kill y una señal "mas fuerte" que fuerza a los procesos a terminar mas allá de su voluntad:

$ sudo kill -9 [PID]

Suele ocurrir que al listar los procesos activos el que se desea finalizar tiene distintas instancias abiertas, es decir, dispone de varias PID y para finalizarlo se necesitaría utilizar varias veces el comando kill. El comando killall se utiliza para finalizar todos los procesos que abre un comando. Como se puede suponer, al disponer de distintas PID no es ésta la que se le debe indicar al comando killall sino el nombre del proceso. Este nombre viene dado en el listado de procesos como CMD; entonces:

$ sudo killall [CMD]

Mediante el comando xkill.

El comando xkill es una utilidad para forzar el Servidor X a cerrar conexiones. Este comando se puede utilizar como el comando kill:

$ sudo xkill -id  [PID]

La ventaja de este comando es que se puede utilizar sin necesidad de PID, ya que si se introduce en el terminal:

$ xkill

El cursor se cambiará a una calavera y la aplicación matará (finalizará) el proceso que controle la ventana donde se haga click con la calavera.


Pausar un proceso

Para pausar un proceso, es preciso conocer el número de identificación del proceso (PID). Para conocer el número basta con listar los procesos.

Listados los procesos, buscar el proceso a pausar y memorizar el número de la columna PID.

Una vez conocido el PID basta con ejecutar en un terminal:

$ sudo kill -STOP [PID]

Para reanudarlo basta con teclear:

$ sudo kill -CONT [PID]
Imagen:Nota clasica.png Si el proceso a pausar es del usuario y no del sistema, no es necesario el empleo del comando sudo


]

El concepto "carga promedio del sistema" (Load Average)

La carga promedio del sistema es la media de trabajos en cola durante un tiempo determinado. En Linux estos tiempos son 1, 5 y 15 minutos. En otras palabras, la carga promedio del sistema para un minuto N es el número de procesos compitiendo por el uso de la CPU en un momento dado, promediada sobre los N minutos.

La carga promedio mínima de un sistema es de 0 y la máxima es ilimitada, aunque raramente excede de 20, e incluso más de 10 es poco usual. Sin embargo he administrado sistemas en los que algún proceso se ha ido demasiado, ¡llegando a una carga promedio de 80! Una carga promedio de 1 ó 2 es lo típico. Menor de 1 es lo ideal.

Para ver la carga promedio de nuestro sistema podemos usar el comando top:

$ top

Que muestra algo similar a ésto (al final de la primera línea se ven los tres números de la carga promedio):

top - 11:11:42 up  2:22,  5 users,  load average: 0.08, 0.36, 0.61
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.2% us, 0.7% sy, 0.0% ni, 83.8% id, 0.0% wa, 0.3% hi, 0.0% si
Mem: 515744k total, 463016k used, 52728k free, 13012k buffers
Swap: 979956k total, 13292k used, 966664k free, 119344k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11434 perico 15 0 32248 13m 8800 S 13.9 2.7 0:12.16 gnome-terminal
7122 root 15 0 62564 48m 9516 S 1.3 9.6 11:13.49 Xorg
15542 perico 16 0 2132 1116 844 R 0.7 0.2 0:00.04 top
1 root 16 0 1564 532 460 S 0.0 0.1 0:01.50 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.20 events/0
4 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 khelper

Fuente: http://www.guia-ubuntu.org/index.php?title=Procesos