Inilah situasinya:
Bekerja pada (versi berikutnya) editor Daftar Cepat Unity, saya ingin menambahkan cara yang dapat diandalkan untuk "memulai kembali" ikon peluncur. Untuk melakukannya, saya harus menghapus ikon (mengedit gsettings) dan menggantinya pada posisi yang sama. Sejauh ini tidak ada masalah. Namun, jika aplikasi tersebut sedang berjalan, pengguna mungkin akan kehilangan data, karena aplikasi akan berhenti ketika ikon itu dihapus dari peluncur. Yang saya butuhkan adalah cara yang dapat diandalkan untuk menemukan nama proses aplikasi, untuk membiarkan editor memeriksa daftar proses yang berjalan jika aplikasi sedang berjalan, dan mengirim pesan peringatan kepada pengguna bahwa ikon tidak dapat dimulai kembali jika aplikasi berlari.
Apa yang saya lakukan sejauh ini adalah membuat editor melihat ke dalam file desktop, untuk membaca perintah, juga membaca perintah, dilucuti dari bagian direktori, dan selanjutnya melihat ke dalam skrip jarak jauh yang mungkin dirujuk oleh perintah file desktop, mencari string yang dimulai dengan "./"
Meskipun metode ini tampaknya bekerja dengan baik dengan semua aplikasi yang saya uji, saya merasa pasti ada cara yang lebih mudah untuk menutupi masalah dengan cara "semuanya" ...
Disana?
Juga disarankan untuk menangkap situasi yang lebih luar biasa!
ps
danxprop
keluaran?.desktop
file, yang belum tentu menjadi WM_CLASS. WM_CLASS dapat diatur dari dalam aplikasi.firefox.desktop
, meluncurkan firefox dengan PID 1234, tetapi berubahWM_CLASS
menjadi sesuatu seperti 'Totally Not Firefox'. The.desktop
berkas namun tidak berubah. Anda ingin mendapatkan nama yang terlampir pada PID 1234 terlepas dariWM_CLASS
. Saya rasa saya tahu persis apa yang perlu dilakukan. Tetapi Anda tidak menjawab pertanyaan pertama saya - apakah boleh jika hanya untuk Unity?Jawaban:
Tidak ada cara untuk menyelesaikan ini dalam kasus umum. Apa pun mekanisme yang Anda buat, saya percaya bahwa akan selalu mungkin untuk menulis proses yang akan menghindari Anda, kecuali Anda memodifikasi cara proses diluncurkan di tempat pertama untuk melacak mereka seperti itu.
Pemula baru harus berurusan dengan masalah yang sama persis untuk dilacak jika daemon masih berjalan, dan penulis pekerjaan pemula harus menentukan detail (jumlah garpu) untuk pemula yang akan dilacak. Mengingat bahwa pemula tidak dapat mengelolanya tanpa bantuan, saya pikir Anda juga tidak bisa. Dan pemula bahkan mengendalikan cara proses diluncurkan, yang saya pikir Anda tidak di sini.
Saya pikir yang terbaik yang dapat Anda lakukan adalah apa yang sudah Anda lakukan. Melihat
/proc/<pid>/stat
dan/proc/<pid>/cmdline
merupakan cara yang cukup umum, tetapi masih tidak akan menangkap setiap kasus. Thepgrep
perintah membungkus ini. Jika Anda belum menggunakanpgrep
, lihat halaman manual pgrep untuk opsi-opsi yang dapat Anda cocokkan.Setelah mengatakan semua itu, saya tidak yakin bahwa Anda benar-benar perlu melakukan ini sejak awal. Jika Anda tidak dapat melacak prosesnya, maka saya juga tidak melihat bagaimana Unity dapat melakukan ini. Bukankah pendekatan yang lebih baik untuk menghilangkan crash aplikasi di tempat pertama? Saya akan melihat detail mengapa aplikasi Anda mogok (pasti itu bug di suatu tempat?), Daripada mencoba mengatasinya seperti yang telah Anda jelaskan. Saya ingin tahu apakah ini hanya memengaruhi aplikasi Unity-aware yang memanggil kembali ke Unity untuk fungsionalitas tambahan melalui DBus ?
sumber
The
xprop
perintah (diikuti dengan alt-tab ke jendela aplikasi yang relevan, kemudian klik sekali di jendela) tampaknya melakukan trik untuk saya.sumber
WM_CLASS
sering cocok dengan nama proses, tetapi jelas tidak selalu. Mendefinisikan (coding) jendela, saya bisa memberikannya sesukaWM_CLASS
saya. Bahkan melakukannya sendiri untuk membuat windows, berjalan dari proses yang berbeda, grup dalam satu ikon peluncur.