Saya perlu menjalankan beberapa proses latar belakang yang hidup selama saya masuk dengan pengguna tertentu.
Apakah ada sesuatu seperti daemon per pengguna? Saya hanya tahu daemon global yang hidup dari startup komputer 'sampai shutdown (atau startup manual / bunuh).
untuk saat ini saya membuat skrip yang memeriksa apakah proses sudah ada dan membuat proses jika tidak. Script ini kemudian dijalankan dengan nohup
perintah dari my .profile
. Dengan cara ini proses diluncurkan pada startup, dan hanya diluncurkan sekali (bahkan dengan beberapa rxvt
istilah yang datang dan pergi). Namun, itu tidak pernah terbunuh setelah saya log (yang bukan bencana tetapi lebih bersih juga untuk menghentikan proses).
sumber
Layanan dbus dimaksudkan untuk precicely that ... ok, dapat digunakan untuk precicely itu :-). Deamon dbus per pengguna dimulai ketika pengguna log in ke lingkungan desktop dan diakhiri ketika pengguna logout (lihat halaman
dbus-launch
manual dan opsi--exit-with-session
). Layanan dbus dapat dimulai bersama dengan instance dbus atau ketika antarmuka layanan disebut pertama kali melalui dbus. Setiap pengguna dapat memiliki spesifikasi layanan dbus sendiri, ditentukan dalam direktori tersembunyi di rumah pengguna, atau secara global masuk/etc
. Lihat beranda dbus di freedesktop untuk banyak dokumentasi dan implementasi referensi.Saya hanya menggunakan distro berbasis Debian hari ini. Semua yang memiliki skrip di
/etc/X11/Xsession.d
mana sangat sering memodifikasi string yang pada akhirnya akan dievaluasi sebagai perintah yang memulai lingkungan desktop yang dipilih. Ada satu skrip untuk dbus, yang menambahkan perintah dengan dbus wrapperdbus-launch
. Wrapper ini meluncurkan server-dbus dan setidaknya pada vanilla Debian (dan saya bersedia mengatakan "pada semua distro berbasis Debian")dbus-launch
diberikan pilihan--exit-with-session
.Anda harus dapat membungkus proses yang ingin Anda jalankan saat pengguna masuk ke layanan dbus dan IIRC dbus secara otomatis menghentikan layanannya sebelum keluar.
sumber
Jika Anda menggunakan BASH sebagai shell Anda, Anda dapat mencoba melakukan beberapa deteksi di ~ / .bash_logout dan matikan proses yang sedang berjalan.
Apa yang mungkin Anda cari dalam jangka panjang adalah berinteraksi (mis. Via D-Bus) dengan sesuatu seperti ConsoleKit atau systemd's logind .
sumber