Bir uygulamanın işlem adını nasıl belirlerim?


13

Durum bu:

Bir Unity Hızlı Liste editörü (sonraki sürümü) üzerinde çalışırken, başlatıcı simgelerini "yeniden başlatmak" için güvenilir bir yol eklemek istiyorum. Bunu yapmak için, simgeyi (gsettings'leri düzenleme) kaldırmam ve aynı konumda değiştirmem gerekiyor. Şimdiye kadar sorun yok. Ancak, söz konusu uygulama çalışıyorsa, uygulama başlatıcıdan kaldırıldığında uygulama çıkacağından kullanıcı muhtemelen veri kaybeder. Benim ihtiyacım uygulama çalışıyorsa çalışan işlem listesinde editör denetimi izin ve simge yeniden edilemez kullanıcıya bir uyarı mesajı göndermek için, bir uygulamanın işlem adını bulmak için güvenilir bir yoldur , eğer bir uygulamadır çalışan.

Şimdiye kadar yaptığım şey, editörün masaüstü dosyasına bakmasını sağlamak, komutu okumak, ayrıca komutu okumak, dizin bölümünden sıyrılmak ve ayrıca masaüstü dosya komutunun başvurabileceği olası uzak komut dosyalarına bakmak, dizeleri başlatmak ile "./"

Yöntem, test ettiğim tüm uygulamalarla iyi çalışıyor gibi görünse de, sorunu "hepsi bir arada" şekilde ele almanın daha kolay bir yolu olması gerektiğini hissediyorum ...

Var mı?

Ayrıca daha istisnai durumlar yakalamak için öneriler bekliyoruz!


Bir uygulama, simgesi başlatıcıdan kaldırıldığında neden kapanıyor? Başlatıcıya sabitlenmemiş bir uygulamadan çıkılması simgesinin kaldırılmasına neden olur, ancak simgeyi kaldırmak neden uygulamadan çıksın?
Eliah Kagan

@Eliah: bırakma muhtemelen doğru ifade değil, uygulama sadece çöküyor ....
Jacob Vlijm

@JacobVlijm yani, bu Birliğe özgü değil mi? Birliğin zaten bunun için bir mekanizması var. Gereksinimler nelerdir? Sadece işlem adını psve xpropçıktısında olduğu gibi bilmek ?
Sergiy Kolodyazhnyy

@Serg Dosyadan "hesaplanan" işlem adı, .desktopWM_CLASS olması gerekmez. WM_CLASS uygulama içinden ayarlanabilir.
Jacob Vlijm

@JacobVlijm ah, bu yüzden başladığınızı varsayalım firefox.desktop, PID 1234 ile firefox'u başlattı, ancak WM_CLASS'Totally Not Firefox' gibi bir şeye dönüştü . Ancak .desktopdosya değişmez. Ne olursa olsun, adı PID 1234'e eklemek istiyorsunuz WM_CLASS. Sanırım tam olarak ne yapılması gerektiğini görüyorum. Ama ilk sorumu cevaplamadınız - eğer sadece Birlik içinse sorun değil mi?
Sergiy Kolodyazhnyy

Yanıtlar:


3

Genel durumda bunu çözmenin bir yolu yoktur. Hangi mekanizma ile karşılaşırsanız karşılaşın, süreçleri ilk aşamada bu şekilde izlemek için başlatılma biçimini değiştirmediğiniz sürece, sizi atlatacak bir süreç yazmanın her zaman mümkün olacağına inanıyorum.

Upstart, cinlerin hala çalışıp çalışmadığını izlemek için tam olarak aynı sorunla uğraşmak zorundadır ve uptart iş yazarları, uptart'ın izlemesi için ayrıntıları (çatal sayısı) belirtmek zorundadır. Uptart'ın yardım almadan yönetemediği göz önüne alındığında, ben de yapabileceğinizi sanmıyorum. Ve başlangıç, burada olduğunuzu düşünmüyorum, süreçlerin başlatılma şeklini bile kontrol ediyor.

Bence yapabileceğiniz en iyi şey zaten yaptığınız şey. Bakmak /proc/<pid>/statve /proc/<pid>/cmdlineoldukça genel bir yoldur, ancak yine de her durumu yakalamayacaktır. pgrepKomut bu sarar. Henüz kullanmıyorsanız pgrep, eşleşebileceğiniz şeylerin seçenekleri için pgrep man sayfasına bakın.

Tüm bunları söyledikten sonra, bunu ilk etapta gerçekten yapmanız gerektiğine ikna olmadım. Süreci izleyemiyorsanız, Unity'nin bunu nasıl yapabileceğini de göremiyorum. İlk etapta uygulama çökmelerini ortadan kaldırmak daha iyi bir yaklaşım olmaz mı? Açıkladığınız gibi geçici bir çözüm bulmak yerine, uygulamalarınızın neden çöktüğünün ayrıntılarına bakacağım (elbette bu bir hatadır?). Bunun yalnızca Unity arkasını aradığınız Birlik tanıyan uygulamalar etkiler acaba DBus yoluyla ekstra işlevsellik ?


Cevabınız için teşekkür ederiz! Ayrıntılara (özellikle son paragrafınıza) bakacağım ve% 100 ruh bulamazsam muhtemelen simge "yeniden başlat" işlevini "deneysel" bir seçenek olarak sunacağım. İyi haber şu ki, bu arada kullandığım yöntem üzerinde herhangi bir istisna bulamadım. Tekrar teşekkürler!
Jacob Vlijm

1

xpropKomutu (ilgili uygulama penceresine alt-sekme sağlandığı sonra pencerede bir kez tıklayın) benim için hile yapmak gibi görünüyor.


WM_CLASSgenellikle işlem adıyla eşleşir, ancak kesinlikle her zaman değil. Bir pencereyi tanımlamak (kodlamak), WM_CLASSistediğim her şeyi verebilirim . Hatta farklı süreçlerden çalışan pencereleri tek bir başlatıcı simgesinde gruplamak kendim bile yaptı.
Jacob Vlijm

Ah. Bu utanç verici. Sonunda "... benim için hile yapıyor gibi görünüyor" feragatname eklemeye değerdi. Bu, işletim sistemine yerleştirilmeyi gerçekten beklediğim bir işlevdi ve nasıl yapılacağını bilmediğimi düşündüm. En azından "Hakkında" bölümündeki bilgileri beklerim.
el_gallo_azul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.