¿Cómo matar a dhcpcd?

El siguiente comando funciona perfectamente para iniciar DHCP:

# dhcpcd -p eth0

DHCP no se puede detener una vez que se inicia. El siguiente comando no funciona:

# dhcpcd -k eth0

Devuelve lo siguiente:

dhcpcd[4700]: sending signal 1 to pid 4086
dhcpcd[4700]: dhcpcd not running
dhcpcd[4700]: kill: Bad file number

¿Alguien podría ofrecer un consejo sobre cómo eliminar DHCP?

¿Es el pid 4086 una constante o cambia?
@DeathMaskSalesman No. Acabo de reiniciar el dispositivo y ejecuté el comando nuevamente. El PID es 4043 esta vez.
Si tiene que incluir esto en un script, este fragmento puede ayudarlo (debe ejecutarse como root): var=$(ps | grep dhcp). Luego, en una nueva línea, haz kill $(echo -n $var | cut -d " " -f 0), y debería matar el proceso por completo.
@DeathMaskSalesman Muchas gracias. Funcionará, aunque sería ideal tener un comando para esto. Puedo usar PS para obtener el PID y luego eliminarlo. Lo he probado, y funciona. ¿Podría convertir su comentario en una respuesta que pueda aceptar?
¿No su -c 'killall dhcpcd'funciona?
@Firelord Obtuve "killall: no encontrado"

Respuestas (2)

Una forma de obtener dinámicamente el PID del proceso dhcp y eliminarlo por completo sería ejecutar:

su
var=$(ps | grep dhcp)
kill $(echo -n $var | cut -d " " -f 0)

Específicamente:

  • la línea 1 solicita permisos de root;
  • la línea 2 asigna la salida de ps(que enumera los procesos activos), filtrada por grepcon la palabra clave dhcp , a la variable var;
  • la línea 3 llama killa terminar el valor contenido en el primer campo ( -f 0) de la variable var, diciéndole cutque separe los campos con un espacio en blanco ( -d " "). No por casualidad, el valor mencionado corresponde al PID del proceso dhcpcd .
Eso mataría cualquier proceso con "dhcp" en su nombre. Incluso killall dhcpcdsería una mejor opción.
@SimonRichter Estás en un error: dado que uso cut, solo el primer PID es candidato para matar. Se le anima a que experimente con él usted mismo, si no cree en la exactitud de la respuesta.
"cualquiera" significa "cualquiera de ellos", no "todos ellos". Específicamente, mata al que tiene el PID más pequeño, por ejemplo, si tengo dos puertos Ethernet y ejecuto dhcpden uno y dhcpcden el otro, dhcpdes probable que se inicie primero porque tiene una prioridad más alta durante el arranque, y su comando sería mata eso en su lugar. Además, si dhcpcdtiene un PID alto, es muy probable que coincida con el grep dhcpcomando en sí, que ha terminado en el momento killen que se llama, por lo que no haría nada en este caso.

Esto también se puede hacer con awk. Los comandos serían;

su

kill -9 $(ps -e | grep dhcp | awk '{ print $1 }')

Detalles

supara saltar al shell raíz, kill -9forzar la eliminación ps -eenumera todos los procesos en detalle, lo canalizamos a través grep dhcpdel cual solo genera cualquier cosa, desde ps -esalida a dhcp, luego lo canalizamos a través de awk, la impresión $ 1 solo imprime el contenido del primer campo, que es la identificación del proceso de dhcp. Y matar matará el proceso que coincida con esa identificación de proceso.