Script para limpiar zombies

Toma como parámetro el id del proceso que generó los zombies y usa GDB para hacer waitpid, lo más seguro es que haga falta root :/

#!/usr/bin/env bash
# Kills zombie process spawning from a parent PID

# check parameter number
if [ -z "$1" ];then
    echo "$0 <zombie parent pid>"
    exit 0
fi

# assign reasonable names to variables
ppid=$1
fname=`tempfile`

# GDB instructions
(for zpid in `ps h --ppid=$ppid|grep -P '^\s*\d+\s+[^ ]+\s+Z'|awk '{print $1;}'`;do
    echo "print waitpid($zpid, 0, 0)" # wait for each zombie
 done
 # and detach
 echo "detach") > $fname

# launch GDB
gdb -batch -p $ppid /proc/$ppid/exe -x $fname

# and cleanup
rm $fname

Estamos de vuelta!

Después de 3 meses vuelve Código para llevar, habrá cambios, para empezar los cambios el sistema de blogging ha pasado de Wordpress a acrylamid, mucho más ligero. La migración no está del todo completa y los comentarios tardarán un rato :P.

Una comunidad en gallego sobre software libre, programación, (in)seguridad informática y demás

Desde finales de julio de este año he tenido la oportunidad de participar junto con @hacklego en la preparación de una comunidad en gallego en torno al software libre, la programación y esos temas y por fin llega el momento de presentarla, así que copio/pego la presentación posteada en HxC que estas ya no son horas de buscar otra forma de hacerlo :P : continue.

Grandes frases

Hoy me encontré con esto, ¿quien no lo pensó alguna vez?... ¿quien no lo pone en práctica todos los días :P?

Hobbes: Pensé que íbamos a hacer la cama.

Calvin: ¿!¿ Y Hacer todo ese trabajo ?!? ¡No, vamos a inventar un robot que haga la cama por nosotros!

Hobbes: ¿Inventar un robot no es más trabajo que hacer la cama?

Calvin: Solo es trabajo si alguien te obliga a que lo hagas.

Sobre el `branching prediction` en x86

En cierto tablón de discusión, de cuyo nombre no quiero acordarme se hablaba sobre la optimización de switches en SBCL (un intérprete/compilador de common lisp), que hacía una serie de CMP, JMP en vez de usar una table, alguien daba como motivo el "branch prediction", parecía poco probable pero algo entretenido de probar.

Nota: mi experiencia con ensamblador es bastante limitada, así que lo que resulte de esto creételo lo justo ;) continue.

Recuperando un archivo eliminado pero abierto por otro proceso

Hoy, hace escasos 10 minutos estaba limpiando el disco, así que me dirijí a la carpeta de vídeos y... ¡raaaaca!, 20 archivos a alimentar la bestia del espacio libre. Pero al ver los archivos que habían sobrevivído a la limpieza sobrevino la preocupación sobre el paradero de uno de ellos, y es que quizá al fin y al cabo saltarse el paso de la papelera de reciclaje no fuera buena idea.

El problema era que me había cargado una película que tenía pensado compartir y con más bien pocos seeders, así que tocaba recuperarlo. Por suerte el transmission seguía abierto y seedeando, así que aún había esperanza, al fin continue.

Escribiendo un salvapantallas para Gnu/Linux [C]

Los salvapantallas son algo que siempre me llamó poderosamente la antención pero hasta hace poco no sabía como se escribían, hoy aprenderemos a hacer uno para el XScreensaver de Gnu/Linux.

El primer paso es hacernos con el archivo vroot.h del xscreensaver (si hacemos apt-get source xscreensaver nos lo encontraremos en el directorio utils/ [o aquí]), y meterlo en el mismo directorio en el que desarrollaremos el resto del código. vroot.h es un archivo (bajo licencia de estilo BSD) usado comunmente para tomar al ventana_raíz, en la que tenemos que escribir si, por ejemplo, queremos hacer un salvapantallas.

Empezamos entonces con nuestro archivo, lo llamaremos salvapantallas.c y empezamos con el código, continue.

Activando los logs generales de MySQL sobre la marcha [tip]

Suponed que estamos programando algo que hace uso de una base de datos MySQL y que de repente comienza a comportarse de forma extraña, como podemos saber que peticiones hace, pues activando los logs generales así:

set global general_log_file = '/var/log/mysql/mysql.log';
-- El archivo puede ser cualquiera, no?
set global general_log = 1;

Lo malo es que hace falta ser root para poder hacerlo (y que el rendimiento cae, claro, no es algo que deba estar siempre activo).

Happy debugging.

Previous » « Next