GNU/Linux >> Znalost Linux >  >> Linux

Jak Linux rozlišuje vlákna od podřízených procesů?

Z task_struct perspektivu, vlákna procesu mají stejného vedoucího skupiny vláken (group_leader v task_struct ), zatímco podřízené procesy mají jiného vedoucího skupiny vláken (každý jednotlivý podřízený proces).

Tyto informace jsou vystaveny uživatelskému prostoru prostřednictvím /proc souborový systém. Rodiče a děti můžete sledovat pomocí ppid pole v /proc/${pid}/stat nebo .../status (to dává nadřazený pid); vlákna můžete sledovat pomocí tgid pole v .../status (to dává id skupiny vlákna, což je také pid vedoucího skupiny). Vlákna procesu jsou viditelná v /proc/${pid}/task adresář:každé vlákno má svůj vlastní podadresář. (Každý proces má alespoň jedno vlákno.)

V praxi jde o programy, které chtějí mít přehled o svých vlastních vláknech by spoléhali na rozhraní API poskytovaná knihovnou vláken, kterou používají, namísto použití informací specifických pro operační systém. Typicky na systémech podobných Unixu to znamená použití pthreads.


  1. Tím se spustí top příkaz s několika dalšími možnostmi:

    top -H -b -n 1
    
    • -H argument dává top pokyn k zobrazení každého jednotlivého vlákna. Normálně top shrnuje všechna vlákna pod jejich nadřazeným procesem.
    • -b argument umožňuje top run v dávkovém režimu – informace jsou shromážděny, zobrazeny a poté vypsány do stdout na rozdíl od spuštění v interaktivním režimu a obnovení zobrazených dat.
    • S -b uživatel musí topu sdělit, kolikrát se má spustit, to se provádí pomocí -n argument a poslední argument s tím, kolikrát spustit.

    Takže top -H -b -n 1 instruuje systém, aby „spouštěl nahoře, zobrazoval jednotlivá vlákna, spouštěl v dávkovém režimu a spouštěl pouze jednou“.

  2. ps příkaz hlásí snímek aktuálně běžících procesů.

    ps -eLf
    

    -eLf argument (lze použít jako -e -L -f stejně) se dělí takto:

    • e říká ps zobrazit všechny procesy bez ohledu na to, kdo je vlastní nebo jejich aktuální stav – aktivní, spící, pozastavené, čekající na I/O atd.
    • L říká ps zobrazit jednotlivá vlákna
    • f říká ps formátovat výstup jako plnoformátový výpis a ve spojení s L argument se do výstupu přidají sloupce NLWP (počet vláken) a LWP (ID vlákna).

Linux
  1. Linux – Jak spustit bootloader z Linuxu?

  2. Linux – Jak linuxové jádro naplánuje CPU, mezi procesy/vlákny v uživatelském prostoru a úkoly/úlohy jádra?

  3. Linux – Jak Node.js / Cluster Module předává nová spojení z hlavního/nadřazeného procesu do podřízených procesů?

  1. Jak rozeznat binární soubory od textových souborů v linuxu

  2. Jak vypočítat využití CPU procesu a všech jeho podřízených procesů v Linuxu?

  3. Jak vyloučit některé uživatele z horní obrazovky Linuxu?

  1. Jak zabít běžící procesy v Linuxu

  2. Jak interně funguje copy_from_user z jádra Linuxu?

  3. Jsou vlákna implementována jako procesy v Linuxu?