Bagaimana cara menentukan nama proses aplikasi?

13

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!

Yakub Vlijm
sumber
Mengapa aplikasi berhenti ketika ikonnya dihapus dari peluncur? Berhenti aplikasi yang tidak disematkan ke peluncur menyebabkan ikonnya dihapus, tetapi mengapa menghapus ikon keluar dari aplikasi?
Eliah Kagan
@ Elia: berhenti mungkin bukan ungkapan yang tepat, aplikasi itu hanya crash ....
Jacob Vlijm
@ JacobVlijm jadi, ini adalah hak khusus Unity? Unity sudah memiliki mekanisme untuk itu. Apa persyaratannya? Hanya untuk mengetahui nama proses yang sama seperti pada psdan xpropkeluaran?
Sergiy Kolodyazhnyy
@Serg Nama proses, "dihitung" dari .desktopfile, yang belum tentu menjadi WM_CLASS. WM_CLASS dapat diatur dari dalam aplikasi.
Jacob Vlijm
@JacobVlijm ah, jadi misalkan Anda mulai firefox.desktop, meluncurkan firefox dengan PID 1234, tetapi berubah WM_CLASSmenjadi sesuatu seperti 'Totally Not Firefox'. The .desktopberkas namun tidak berubah. Anda ingin mendapatkan nama yang terlampir pada PID 1234 terlepas dari WM_CLASS. Saya rasa saya tahu persis apa yang perlu dilakukan. Tetapi Anda tidak menjawab pertanyaan pertama saya - apakah boleh jika hanya untuk Unity?
Sergiy Kolodyazhnyy

Jawaban:

3

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>/statdan /proc/<pid>/cmdlinemerupakan cara yang cukup umum, tetapi masih tidak akan menangkap setiap kasus. The pgrepperintah membungkus ini. Jika Anda belum menggunakan pgrep, 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 ?

Robie Basak
sumber
Terima kasih atas jawaban Anda! Saya akan melihat detail (terutama paragraf terakhir Anda), dan mungkin akan menawarkan ikon "restart" berfungsi sebagai opsi "eksperimental" jika saya tidak dapat menemukan 100% soulution. Berita baiknya adalah bahwa sementara itu, saya tidak menemukan pengecualian pada metode yang saya gunakan. Sekali lagi terima kasih!
Jacob Vlijm
1

The xpropperintah (diikuti dengan alt-tab ke jendela aplikasi yang relevan, kemudian klik sekali di jendela) tampaknya melakukan trik untuk saya.

el_gallo_azul
sumber
WM_CLASSsering cocok dengan nama proses, tetapi jelas tidak selalu. Mendefinisikan (coding) jendela, saya bisa memberikannya sesuka WM_CLASSsaya. Bahkan melakukannya sendiri untuk membuat windows, berjalan dari proses yang berbeda, grup dalam satu ikon peluncur.
Jacob Vlijm
Oh Itu memalukan. Layak saya menambahkan penafian "... sepertinya melakukan trik untuk saya" pada akhirnya. Ini adalah fungsi yang saya benar-benar harapkan untuk dimasukkan ke dalam sistem operasi, dan saya pikir saya tidak tahu bagaimana cara melakukannya. Paling tidak, saya akan mengharapkan informasi di "Tentang".
el_gallo_azul