Quiero ejecutar una conexión ppp cuando mi módem USB está conectado, así que uso esta udevregla:
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="16d8",\
RUN+="/usr/local/bin/newPPP.sh $env{DEVNAME}"
(Mi módem aparece /devcomo ttyACM0)
newPPP.sh:
#!/bin/bash
/usr/bin/pon prov $1 >/dev/null 2>&1 &
Problema:
El udevevento se dispara y newPPP.sh se está ejecutando, pero el newPPP.shproceso finaliza después de ~ 4-5s. pppno tiene tiempo para conectarse (su tiempo de espera es de 10 segundos para acceso telefónico).
¿Cómo puedo ejecutar un proceso a largo plazo que no se eliminará?
Intenté usarlo nohup, pero tampoco funcionó.
Sistema: Arch Linux
Actualizar
Encontré una solución aquí , gracias a maxschlepzig .
Solía at nowejecutar mi trabajo separado del proceso udev.
Pero la única pregunta sigue sin respuesta: ¿Por qué trabajar nohupy &no trabajar?

Shell tiene la capacidad de ejecutar comandos en segundo plano:
Los comandos agrupados por las llaves con ampersand después de ellos se ejecutarán de forma asíncrona en una subshell. Lo uso para conectarme automáticamente cuando se inserta y se conmuta un módem USB. Tarda unos 20 segundos y funciona bien bajo udev.
fuente
Lo tengo para trabajar con setsid. Mi RUN parte de la regla udev:
luego en el guión:
La primera llamada al script regresa con el estado de salida 0, pero la segunda llamada al script continúa ejecutándose con PPID = 1.
fuente
Probablemente porque su proceso padre finaliza y la señal de terminación se propaga a sus hijos, que no lo bloquean (y en caso de
SIGKILLque ni siquiera puedan).fuente