Saya ingin menjalankan koneksi ppp ketika modem USB saya terhubung, jadi saya menggunakan udev
aturan ini :
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="16d8",\
RUN+="/usr/local/bin/newPPP.sh $env{DEVNAME}"
(Modem saya muncul /dev
sebagai ttyACM0
)
newPPP.sh:
#!/bin/bash
/usr/bin/pon prov $1 >/dev/null 2>&1 &
Masalah:
The udev
kebakaran acara, dan newPPP.sh berjalan, tetapi newPPP.sh
proses tewas setelah ~ 4-5s. ppp
tidak punya waktu untuk terhubung (batas waktu 10-an untuk dial up).
Bagaimana saya bisa menjalankan proses waktu yang lama, itu tidak akan dibunuh?
Saya mencoba menggunakan nohup
, tetapi tidak berhasil juga.
Sistem: Arch Linux
Memperbarui
Saya menemukan solusi di sini , terima kasih kepada maxschlepzig .
Saya gunakan at now
untuk menjalankan pekerjaan saya terlepas dari proses udev.
Namun satu pertanyaan masih belum terjawab: Mengapa nohup
dan &
tidak bekerja?
Shell memiliki kemampuan untuk menjalankan perintah di latar belakang:
Perintah yang dikelompokkan oleh kawat gigi dengan ampersand setelahnya akan dijalankan secara tidak bersamaan dalam sebuah subkulit. Saya menggunakan ini untuk menghubungkan otomatis ketika modem USB dimasukkan dan diaktifkan. Dibutuhkan sekitar 20 detik dan berfungsi dengan baik di bawah udev.
sumber
Saya membuatnya bekerja dengan setsid. RUN saya bagian dari aturan udev:
lalu dalam skrip:
Panggilan pertama ke skrip kembali dengan status keluar 0, tetapi panggilan kedua ke skrip terus berjalan dengan PPID = 1.
sumber
Mungkin karena proses induknya dihentikan dan sinyal terminasi merambat ke anak-anaknya, yang tidak memblokirnya (dan jika
SIGKILL
mereka bahkan tidak bisa).sumber