Background-Process

背景、殭屍、守護程序和沒有 ctty - 這些概念有聯繫嗎?

  • March 21, 2017

這些過程概念是如何联系在一起的- backgroundzombie和?daemon``without controlling terminal

我覺得它們在某種程度上很接近,尤其是通過controlling terminal.

更新#1:例如(我不知道這是不是真的)

  • backgroundzombie前台程序不能成為zombie,因為zombie是一個沒有父程序的後台程序
  • daemonwithout ctty所有daemons執行都沒有ctty,但並非所有程序ctty都沒有daemons
  • backgrounddaemon可以background process檢索到再次互動執行,daemon is not
  • zombie——有無without ctty依附無所謂zombie``ctty
  • background—在他們擁有without cttyprocesses時候發送到後台,如果從他們那裡拿走,ctty就會變成守護程序或死亡ctty

簡而言之,加上鍊接。

殭屍

已退出/終止的程序,但其父程序尚未確認終止(使用wait()系統呼叫)。死程序保存在程序表中,以便它們的父程序可以被告知其子程序正在退出,以及它們的退出狀態。通常,fork 子程序的程序也會在它們退出時讀取它們的退出狀態,因此只有當父程序停止或出現故障時,您才會看到殭屍。

看:

控制終端、會話、前台、後台

這些與在終端上執行的 shell 上下文中的作業控制有關。使用者登錄,會話啟動,綁定到終端(控制終端)並啟動外殼。然後,shell 執行程序並按照使用者的意願將它們發送到前台和後台(&在啟動程序時使用^Z,使用fg、 和停止它bg)。如果從終端讀取或寫入,後台程序將停止;^C如果在終端上被擊中,前台的程序會收到中斷信號。(處理這些信號的是核心的終端驅動程序,shell 控制將哪個程序(組)發送到前台或後台。

看:

守護程序

作為守護程序執行的程序通常不應綁定到任何特定終端(或登錄會話或外殼)。它不應該有一個控制終端,這樣如果終端關閉它就不會接收到信號,而且通常也不希望它在終端上進行 I/O。從命令行啟動守護程序需要打破與終端的所有聯繫,即啟動一個新會話(在上面的作業控制意義上)以擺脫控制終端,並關閉終端的文件句柄。當然init,登錄會話之外的從、systemd 或類似的東西開始不會有這些聯繫。

由於守護程序沒有控制終端,它不受作業控制,並且在作業控制意義上處於“前台”或“後台”並不適用。此外,守護程序通常會在它們退出時重新成為其父級init,因此您通常不會將它們視為殭屍。

看:

引用自:https://unix.stackexchange.com/questions/352781