Ich möchte eine PPP- Verbindung herstellen, wenn mein USB-Modem angeschlossen ist. Daher verwende ich diese udev
Regel:
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="16d8",\
RUN+="/usr/local/bin/newPPP.sh $env{DEVNAME}"
(Mein Modem erscheint in /dev
als ttyACM0
)
newPPP.sh:
#!/bin/bash
/usr/bin/pon prov $1 >/dev/null 2>&1 &
Problem:
Das udev
Ereignis wird ausgelöst und newPPP.sh wird ausgeführt, aber der newPPP.sh
Prozess wird nach ~ 4-5 Sekunden abgebrochen. ppp
hat keine Zeit zum Herstellen einer Verbindung (das Zeitlimit für die Einwahl beträgt 10 Sekunden).
Wie kann ich einen langen Prozess ausführen, der nicht getötet wird?
Ich habe es versucht nohup
, aber es hat auch nicht funktioniert.
System: Arch Linux
Aktualisieren
Ich fand eine Lösung hier , dank maxschlepzig .
Ich verwende at now
meinen Job getrennt vom udev-Prozess.
Die eine Frage bleibt jedoch unbeantwortet: Warum arbeiten nohup
und &
nicht arbeiten?
Shell kann Befehle im Hintergrund ausführen:
Befehle, die durch geschweifte Klammern mit kaufmännischem Und nach ihnen gruppiert werden, werden asynchron in einer Unterschale ausgeführt. Ich verwende dies, um automatisch eine Verbindung herzustellen, wenn ein USB-Modem angeschlossen und umgeschaltet wird. Es dauert ungefähr 20 Sekunden und funktioniert gut unter udev.
quelle
Ich habe es mit setsid arbeiten lassen. Mein RUN-Teil der udev-Regel:
dann im Skript:
Der erste Aufruf des Skripts wird mit dem Exit-Status 0 zurückgegeben, der zweite Aufruf des Skripts wird jedoch weiterhin mit PPID = 1 ausgeführt.
quelle
Wahrscheinlich, weil der übergeordnete Prozess beendet ist und sich das Beendigungssignal an die untergeordneten Signale weitergibt, die es nicht blockieren (und falls
SIGKILL
sie es überhaupt nicht können).quelle