Vamos ver los comandos con los que podemos ver el estado y atributos de los procesos y los comandos que nos permiten cambiar algunas características de los procesos.
Cuando ejecutamos un comando en la consola esta se queda a la espera que termine el proceso que hemos ejecutado. Podemos hacer que comience la ejecución e inmediatamente nos devuelva el control a la consola. Para ello tenemos que utilizar el operador & al final del comando.
[pcm@sal]$
firefox &
[1] 23710
[pcm@sal]$
Si no hubiésemos puesto & hasta que no cerráramos la aplicación firefox no podríamos usar la consola. Podríamos ver que estamos ejecutando en esa consola en background con el comando jobs.
[pcm@sal]$
jobs
[1]+ Running firefox &
[pcm@sal]$
Incluso podemos llevar una aplicación que esta corriendo en background a la consola con el comando fg dándole el número que aparece con el comando jobs o cuando ejecutamos el comando en background. También podemos parar un proceso que esta en la consola pulsando Control+Z o utilizando desde otra consola el comando kill, y luego enviando el proceso a background con bg.
[pcm@sal]$
fg 1
firefox
Si ahora queremos llevarle a background de nuevo pulsaríamos Control+Z.
[1]+ Stopped firefox
[pcm@sal]$
bg 1
[1]+ firefox &
[pcm@sal]$
Si un proceso en background utiliza la consola para interactuar con el usuario, el proceso se queda en estado parado.
Este comando nos permite ver los procesos que actualmente existen en el sistema. Es un comando con una amplia parametrización para que podamos ver cómodamente la información de procesos.
Este es el comando preparado para ver todas las características de los procesos. Al ser un comando estándar el todos los UNIX soporta un montón de parámetros especificados en versiones anteriores del ps.
Para listar todos los procesos de la máquina haríamos:
[root@sal]#
ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Apr07 ? 00:00:01 init [2] root 2 1 0 Apr07 ? 00:00:02 [keventd] root 3 1 0 Apr07 ? 00:00:00 [ksoftirqd_CPU0] root 4 1 0 Apr07 ? 00:00:00 [ksoftirqd_CPU1] root 5 1 0 Apr07 ? 00:00:03 [kswapd] root 6 1 0 Apr07 ? 00:00:00 [bdflush] root 7 1 0 Apr07 ? 00:00:03 [kupdated] root 409 1 0 Apr07 ? 00:00:00 [knodemgrd_0] root 541 1 0 Apr07 ? 00:00:00 [khubd] daemon 865 1 0 Apr07 ? 00:00:00 /sbin/portmap root 955 1 0 Apr07 ? 00:00:03 /sbin/syslogd root 958 1 0 Apr07 ? 00:00:00 /sbin/klogd pcm20 1026 1 0 Apr07 ? 00:00:00 /usr/sbin/famd -T 0 root 1032 1 0 Apr07 ? 00:00:00 /usr/sbin/inetd root 1047 1 0 Apr07 ? 00:00:00 /usr/sbin/lisa root 1150 1 0 Apr07 ? 00:00:01 /usr/sbin/nmbd -D root 1152 1 0 Apr07 ? 00:00:00 /usr/sbin/smbd -D root 1158 1152 0 Apr07 ? 00:00:00 /usr/sbin/smbd -D root 1159 1 0 Apr07 ? 00:00:00 /usr/sbin/sshd root 1168 1 0 Apr07 ? 00:00:00 /sbin/rpc.statd root 1174 1 0 Apr07 ? 00:00:01 /usr/sbin/sensord -f daemon daemon 1205 1 0 Apr07 ? 00:00:00 /usr/sbin/atd root 1208 1 0 Apr07 ? 00:00:00 /usr/sbin/cron root 1313 1 0 Apr07 ? 00:00:02 /usr/sbin/apache root 1325 1 0 Apr07 ? 00:00:00 /usr/bin/hts -F localhost:22 root 1341 1 0 Apr07 ? 00:00:00 /usr/bin/kdm root 1348 1 0 Apr07 tty1 00:00:00 /sbin/getty 38400 tty1 root 1349 1 0 Apr07 tty2 00:00:00 /sbin/getty 38400 tty2 root 1350 1 0 Apr07 tty3 00:00:00 /sbin/getty 38400 tty3 root 1351 1 0 Apr07 tty4 00:00:00 /sbin/getty 38400 tty4 root 1352 1 0 Apr07 tty5 00:00:00 /sbin/getty 38400 tty5 root 1353 1 0 Apr07 tty6 00:00:00 /sbin/getty 38400 tty6 root 1372 1341 0 Apr07 ? 00:14:53 /usr/X11R6/bin/X -nolisten tcp - root 1411 1 0 Apr07 ? 00:00:02 /usr/bin/perl /usr/share/webmin/ root 1418 1341 0 Apr07 ? 00:00:00 -:0
[root@sal]#
Es muy recomendable ver el manual de este comando.
Nos muestra información de los procesos que existen, y de algunos parámetros del sistema como la memoria, tiempo de ocupación de cpu, a intervalos, es decir, no termina una vez que los muestra si no que vuelve a ejecutarse en pequeño tiempo y vuelve a mostrar los nuevos datos.
[root@sal]#
top
top - 01:47:25 up 1 day, 3:38, 1 user, load average: 0.01, 0.04, 0.03 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 5.6% user, 8.2% system, 0.0% nice, 86.1% idle Mem: 516528k total, 503012k used, 13516k free, 44320k buffers Swap: 337356k total, 13496k used, 323860k free, 165572k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2078 pcm 19 0 14772 14m 12m S 10.6 2.8 11:37.18 kdeinit 1372 root 12 -10 83448 73m 9228 S 3.5 14.5 14:55.90 XFree86 22682 root 19 0 1084 1084 844 R 3.2 0.2 0:00.30 top 2086 pcm 10 0 101m 97m 23m S 1.3 19.4 21:51.38 netscape-bin 21199 pcm 12 0 30420 29m 13m S 1.3 5.9 0:10.50 java_vm 2100 pcm 12 0 101m 97m 23m S 1.0 19.4 0:09.66 netscape-bin 2075 pcm 11 0 18184 17m 13m S 0.6 3.5 0:21.67 kdeinit 5012 pcm 11 0 10864 10m 4072 S 0.6 2.0 3:13.78 emacs 8591 mysql 10 0 13600 13m 2932 S 0.6 2.6 0:48.99 mysqld 1411 root 10 0 5744 3448 2088 S 0.3 0.7 0:02.43 miniserv.pl 2068 pcm 9 0 12920 12m 10m S 0.3 2.4 1:35.65 kdeinit 8153 root 9 0 944 904 796 S 0.3 0.2 0:09.22 dirmngr 8592 mysql 10 0 13600 13m 2932 S 0.3 2.6 0:54.86 mysqld 21197 pcm 9 0 30420 29m 13m S 0.3 5.9 0:04.70 java_vm 1 root 9 0 500 500 448 S 0.0 0.1 0:01.62 init 2 root 9 0 0 0 0 S 0.0 0.0 0:02.30 keventd
El mismo comando pero visualmente más bonito y más sencillo de utilizar es htop. Aunque es probable que no lo encontremos instalado como base en muchos sistema Linux o Unix.
Nos da el árbol de procesos, es decir nos hace un árbol de los procesos mediante su PPID.
Estos comandos nos permiten lanzar un proceso con una prioridad determinada el primero y el segundo cambiar la prioridad de un proceso.
Nos permite enviar una señal a un proceso. Por defecto envía la señal de parada al PID que pongamos, de ahí su nombre, pero realmente con un parámetro podemos enviar otros tipos de señales de procesos.
[root@sal]#
kill 22670
[root@sal]#
Para ver la lista de señales soportadas por el comando podemos hacer:
[root@sal]#
kill -l
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 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 33) SIGRTMIN 34) SIGRTMIN+1 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-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
[root@sal]#
Las señales más utilizadas son:
SIGKILL Termina el proceso, no puede ser ignorada. Se
puede enviar con kill -s SIGKILL
pid o kill -9
pid, que es modo estándar en
otros UNIX.
SIGSTOP Para el proceso, no puede ser ignorada.
SIGTERM Se ordena al proceso que termine, el cual puede ser ignorar la señal. El la señal enviada por defecto.
Con estos comandos vamos a poder enviar señales a procesos, en vez de por PID, por el nombre, con killall y por otras propiedades de los procesos como pueden ser el usuario, el GID, el proceso padre, etc, con pkill. Por ejemplo:
[pcm@sal]#
ps
4548 pts/2 00:00:00 bash 4565 pts/2 00:00:00 gconfd-2 22780 pts/2 00:00:34 xpdf.bin 22824 pts/2 00:00:00 ps
[pcm@sal]#
killall xpdf.bin
[pcm@sal]#
Con esta acción terminaría el proceso 22780.