[筆記]Linux的process和signal

Session, process group, and signal in Linux

petertc
5 min readFeb 22, 2019

Linux的process和signal機制算是OS課本的基礎知識,書本或網路已經有很好的整理了,這邊是自己複習時候的筆記。較完整的論述,可以參考一下兩份文件:

Session和process group

process是OS邏輯排程執行的基本單位。為了管理process,OS會將process分組管理,session和process group (PG)就是process群組的單位。一個session可包含多個process group,一個process group可以包含多個process。session/PG有以下性質:

  • 每個session/PG都會有一個leader,通常是該群集中第一個process
  • 每個session/PG都會有一個id,由該群集中第一個process的PID決定
  • 每個session可以配給一個terminal
  • 一個session中,terminal會被attach到其中一個process group
  • 被attach terminal的process group給名詞叫foreground process group
  • 其他的對應為background process group

Shell如何配置session和process group

在shell中,每次登入都會由shell process開一個session。每行指令都會是一個process group。

在shell中,foreground/backend process group可以用bg/fg/jobs指令管理切換。

以下節錄一個shell執行命令的概念圖:

下圖用htop實際觀察session/process group/process階層關係:

圖中的前六個column是這邊特別要觀察的,分別是session id, tty號碼, foreground PGID, process group id, parent process id, process id。

可以看到“deamon” process還是有session的,只是這個session沒有配給TTY。

另外TTY是raw data,需要decode才能變ptty號碼 https://github.com/hishamhm/htop/issues/316

Signals

訊號/信號Unix類Unix以及其他POSIX相容的作業系統中行程間通訊的一種有限制的方式。它是一種異步的通知機制,用來提醒行程一個事件已經發生。當一個訊號傳送給一個行程,作業系統中斷了行程正常的控制流程,此時,任何非原子操作都將被中斷。

Linux所有訊號列表可以參考man page

Signal是OS控制程序執行的媒介,例如用戶要終止某一執行中的應用程式,OS就要將用戶的這個意圖,利用訊號正確地傳遞到指定的應用程序。這類要求process結束的訊號稱為termination signalsglibc的文件列出了所有終止訊號,其中通常我們比較關注會的是 SIGHUP、SIGTERMSIGINT。

應用程序可能是multiprocessing架構,要終止此應用需kill這個應用程序所有的process。在這個例子,我們需要發送一個終止訊號給此應用程序所有process所屬的process group以終止應用。在Linux實際上就是這樣運作的,當用戶按下ctrl+C,SIGINT會送給foreground process group,也就是其中每個process,包含parent和childern都會收到此訊號。

在上面的例子可以看到signal的傳播與process群集管理的息息相關。另一個例子是user logout。當用戶登出系統,shell會發送SIGHUP給此shell發起的session中的所有process,在預設狀況下這些process就會終止。

Summary

本篇整理OS的signal機制和session/process group。termination signals機制用來通知process結束,process group讓signal可以傳遞給特定一群的process。

這篇還沒講的就是process如何處理收到的signal。

As a programmer,工作是讓app合宜處理收到的signal。例如當收到termination singal時,正確釋放資源,graceful的shutdown,或是daemonlize,讓程序可以長期持續執行,不受用戶操作或登出影響。

下一篇就來講應用程序應對terminate singal的幾種處理pattern, to be continue~

--

--