GNU/Linux >> Znalost Linux >  >> Linux

Kdy je setsid() užitečné nebo proč potřebujeme seskupovat procesy v Linuxu?

Relace je sada procesů, které sdílejí řídicí terminál. setsid je užitečné, když chcete zahájit novou relaci, protože jste začali být připojeni k novému terminálu - například při spouštění shellu v emulátoru terminálu - nebo chcete démona (což nechcete být spojen s řídicím terminálem).

Nejlepší vysvětlení tohoto aspektu, které znám, je v R. W. Stevensovi Pokročilé programování v prostředí Unix .


Why do we need to group processes? Zvažte situaci, ve které se chcete čistě vypnout, a to zahrnuje vyslání signálu svým dětem. Existuje inherentní rasová podmínka:SIGCHLD nebyl přijat, takže víte, že dítě je stále naživu. Vyšlete tedy signál. Ale dítě skončí před odesláním signálu a spustí se jiný (nesouvisející) proces a dostane stejný pid jako dítě, kterému byl signál odeslán. Signál pak jde do nového, nesouvisejícího procesu. Je to špatné. Takže místo odeslání signálu konkrétním pidům signalizujete skupině procesů. Když dítě zemře a nový proces začne s původním pid, nový proces není část procesní skupiny a předešlo se výše popsanému problému.


Linux
  1. Proč mě moje potřeba kontroly přiměla přejít na Linux

  2. Linux – Kdy nemám zabít -9 A proces?

  3. Linux – Může Ctrl+c odeslat signál Sigint více procesům?

  1. 30 Cvičení procesů Linuxu pro systémové správce

  2. Proč není Sigint propagován do podřízeného procesu, když je odeslán jeho nadřazenému procesu?

  3. Linux – Init Process:Předchůdce všech procesů?

  1. UNIX / Linux:3 způsoby odesílání signálu do procesů

  2. Základy signálů Linuxu – část I

  3. UNIX / Linux Procesy:C fork() Funkce