Linux, alt süreçlerden ayrı konuları nasıl anlatır?


Yanıtlar:


28

Bir task_structperspektiften, bir sürecin iş parçacıkları aynı iş parçacığı grup liderine ( group_leaderintask_struct ) sahipken, alt işlemlerin farklı bir iş parçacığı grup liderine (her bir bireysel çocuk işlem) sahiptir.

Bu bilgiler kullanıcı uzaya maruz yoluyla/proc dosya sistemi. Ebeveynleri ve çocukları izleyerek veya içindeki ppidalana bakabilirsiniz (bu ebeveyn ebeveyni verir); Alandaki alana bakarak konuları takip edebilirsiniz (bu, aynı zamanda grup liderinin iştiraki olan konu grubu kimliğini verir). Bir işlemin başlıkları dizinde görünür hale gelir : her iş parçacığı kendi alt dizinini alır. (Her işlem en az bir dişe sahiptir.)/proc/${pid}/stat.../statustgid.../status/proc/${pid}/task

Uygulamada, kendi iş parçacıklarını takip etmek isteyen programlar , işletim sistemine özgü bilgileri kullanmak yerine, kullandıkları iş parçacığı kütüphanesinin sağladığı API'lere dayanacaktır. Tipik olarak, pthreads kullanımı anlamına gelen Unix benzeri sistemlerde.


Bir kabuk boru hattındaki her işlem (echo foo | cat) aynı grup liderini (kabuk) paylaşır, ancak aynı süreçte iş parçacığı değildir.
psusi

2
Süreç grupları hakkında konuşuyorsunuz; Cevabımda, grup lideri çekirdek perspektifinden. Çekirdeğin muhasebesinde, ayrı işlemler kendi grup liderleridir. Bunu, her işlemin dosyasındaki değerlere (sleep 120 | sleep 120) &bakarak ve çalıştırarak görebilirsiniz . Tgidsleep/proc/${pid}/status
Stephen Kitt

Ah garip. "İş parçacığı grubu lideri" diye bir şey olduğunu bilmiyordum ve çok iş parçacıklı bir süreçteki tüm iş parçacıklarının eşit olduğunu ve "lider" olmadığını sanıyordum. Bunlardan herhangi biri çıkabilir ve biri kaldığı sürece, süreç ölmedi.
psusi

5
  1. Bu top, bazı ekstra seçeneklerle komutu çalıştırır :

    top -H -b -n 1
    
    • -HArgüman talimatını her iş parçacığı görüntülemek için top. Normalde üst, tüm başlıkları üst süreçleri altında özetler.
    • -bArgüman toplu modunda üst çalışmasını yapar - bilgi toplanır, görüntülenen ve etkileşimli modda çalışan ve veri görüntülenen ferahlatıcı aksine sonra Stdout'a bırakmıştı.
    • Bu -bseçenekle, kullanıcı kaç kez çalıştırılacağını üste bildirmelidir, bu -nargüman ve kaç kez çalıştırılacağına dair son bir argümanla yapılır .

    Bu nedenle top -H -b -n 1sisteme “üst sıraya koyma, tek başlıklar gösterme, toplu modda çalıştırma ve yalnızca bir kere çalıştırma” talimatını verir.

  2. psKomut anda çalışan süreçlerin bir anlık raporlar.

    ps -eLf
    

    -eLfArgüman (olarak kullanılabilir -e -L -faşağıdaki gibi aşağı sonları yanı):

    • epstüm süreçleri, sahip olduklarına veya mevcut durumlarına bakılmaksızın (aktif, uyku, duraklatılmış, G / Ç için beklemek vb.) göstermemeyi söyler .
    • Lsöyler psbireysel konuları göstermek için
    • fanlatır psile tam biçim listesi olarak çıktı ve bağlantılı olarak biçimlendirmek için LNLWP (parçacığı sayısı) ve HS (diş İD) sütun çıktısına eklenir, argüman.

1

PID p1 ile bir işlem düşünün

task_structBir çocuk sürecin nesnesi p1 olarak PPID'yi (ana PID) sahip olacak ve bu p2, diyelim ki, PID ve TGID seti.

task_structP1 bir iş parçacığı nesnesi p1 olarak PID set, diyelim p3 ama TGID kümesine sahip olacaktır.


Demek Stephen Kitt ile aynı şeyi söylüyorsun , ama çok daha az net. Not: Eğer bir iş parçacığının PPID'sini söylemeyecekseniz neden PPID'yi tartışmaya sokmaktan rahatsız olursunuz?
Scott

PID ve TGID her zaman aynıdır.
Tim
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.