Bir sürecin üst süreci değiştirilsin mi?


14

Bir sürecin üst sürecini değiştirmek mümkün müdür? Evet ise, nasıl?

Örneğin,

  • screenBir screenoturumu ve içinde çalışan işlemleri farklı kabuk işlemlerine nasıl ekleyebilirim ? Ana süreç değişikliği var mı?

  • Bir programın çalıştığı kabuk sürecinin değişmesinin diğer yollarını duymuş gibiyim, ama hatırlamıyorum. Programın ebeveyn sürecinde de bir değişiklik var mı?

  • disownBir işlem üzerinde sürecin üst sürecini değiştirdiğini düşündüm , çünkü bu isim bunu disownima ediyor. Ama bunun doğru olmadığını gördüm.

  • Emacs istemcisi farklı bir terminal sekmesinde emacs sunucusuna bağlanabilir. Ana süreç değişikliği var mı?


disownbelirli bir çocuğu kabuğun dahili alt süreç listesinden kaldırır. Çocuğun PPID'si kabuğunki olarak kalır. Kabuk, o çocuğu başlattığını unutmuş, ancak çekirdek hatırlıyor.
Warren Young

Süreç ebeveynini hatırlıyor mu?
Tim

Bilmek istiyorsa, çağırır getppid(2), bir sistem çağrısı ve sistem çağrıları çekirdek tarafından işlenir. Bir program, bu çağrıyı vererek, değeri kaydederek ve daha sonra ebeveynliği değiştikten sonra bu değeri kullanarak karıştırılabilir. Burada bir yarış durumu şansı var.
Warren Young

Kulağa ilginç yeni bir özellik geliyor.
ChuckCottrill

Yanıtlar:


14

Bir işlemin üst işlem kimliği (ppid) çekirdek dışında değiştirilemez; setppid sistem çağrısı yoktur. Çekirdek, yalnızca işlem üst öğesinin sonlandırılmasından sonra ppid değerini (pid) 1 olarak değiştirir - işlem üst öğenin sonlandırıldığı sinyaline yanıt vermediyse. Bunun gerçekleşmesi için, süreç ihtiyaçları (çeşitli sinyaller göz ardı etmiş SIGHUP, SIGTERMönceden, vs.).

screen(1)ayırma ve yeniden takma işlemlerinde çok zarif bir araç sunar. İlk başlattığınızda screen, varsayılan olarak bir arka plan programı (oturum yöneticisi) oluşturacak bir kullanıcı arabirimi (ui) başlatıyorsunuz . Bu arka plan programının kendisiyle ilişkilendirilmiş bir terminali yok, yeni bir işlem grubu ( setpgrp(2)), yeni bir oturum kimliği ( setsid(2)) var. Daha SCREENsonra çalışan arka plan programı, sözde terminallere ( pty) bağlı alt süreçler oluşturur, ardından verileri ptys ve ui ( screen) ' den çoğaltır . Alt süreçler gerçek bir terminalle konuştuklarını düşünüyorlar.

Kullanıcı arabirimi screensonlanırsa, arka plan programı SCREENçalışıyor, veri arabelleğe alınıyor, sinyalleri işliyor, yeni bir kullanıcı arabirimi bekliyor, vb. Çünkü farklı bir işlem grubu ve kendi oturumunda. Yeni bir kullanıcı arayüzüyle yeniden bağlandığınızda screen, arka plan programı eskisi gibi çoğullamaya devam eder. Arka plan programı, tüm alt işlemler sona erene, öldürülene, önemli bir hatayla karşılaşılana veya ana bilgisayar yeniden başlatılana kadar çalışmaya devam eder.


Teşekkürler. "Emacs istemcisi farklı bir terminal sekmesindeki emacs sunucusuna ekleyebilir. Üst işlem değişikliği var mı?"
Tim

1
Her süreç, ebeveyn ölünceye veya ölene kadar yalnızca bir ebeveyne sahiptir. Eğer ölürse, mesele tartışmalıdır. Ebeveyn ölürse, PPID initsüreç 1 olur . Üst süreç sona erdiğinde bu üst sürecin değişeceği tek zamandır. İşlemler arası iletişim (borular, soketler, vb.) İle bağlanmanın PPID üzerinde bir etkisi yoktur.
Arcege

Emacs, istemciyi farklı terminal sekmelerinde bir sunucuya nasıl ekler?
Tim

Sunucu, bağlantıları bekleyen bir soketi (genellikle UNIX etki alanı soket dosyası) dinler. İstemciler bu sokette bir bağlantı açar. Sekmeler, istemci ve sunucu arasındaki iletişim ile ilgisizdir, farklı sekmeler, farklı geçici emülatörler (xterm vs rxvt vs terminal) veya xemacs olabilir. Her istemci nereye bağlanacağını bilir, böylece her yerden olabilir.
Arcege


-2

Anlıyorum. Bunun için bazı modül yazmak için çekirdeği değiştirmeniz gerekir! Bazı durumlarda faydalı olacağını düşünüyorum. Örneğin, uzun süredir çok çalışıyorsunuz ve bir saat boyunca birçok kaynak alıyorlar ... Ve sistem yanıt vermediğinde (bu durumda her zamanki gibi) bazı öngörülemeyen eylemler gerçekleştirirsiniz (çünkü yapmanız gereken ve tıkladığınızdan emin değilsiniz) bir fare doğru yerde sistem uzun bir süre yanıt vermeyecek şekilde) ve yanlışlıkla üst süreci öldürmek. Sistem genellikle tüm çocukları öldürür! Ancak alt süreç kök ve ebeveyn ise sadece sıralı kullanıcı ve eylem sıralı kullanıcı da bu işlemi her durumda öldürülmez yapmak! Ve ebeveyni PID 1 ile başlatılacak. Ve sistem yanıttan sonra hiyerarşiyi geri yüklemek istiyorsunuz. Ama yapamazsın !!! Standart yükseltme sistemini su ile normal kullanıcı olarak terminalden kök olarak başlatırsınız. Neden? Konsoldaki tüm hataları ve uyarıları almak için. Özellikle yükseltme yardımcı programı GUI. Hiçbir şey bu bilgi almak ... Windows işletim sisteminde bu yapılabilir hatırlıyorum. Özel WinAPI işlevleri vardır. Neden Linux'ta bu yapılamaz? Açık değil ... Basit bir şey !!!

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.