Shell

螢幕內的程序與前台程序的處理方式是否不同?

  • April 8, 2019

假設我有一個長時間執行的程序,long_running_proc只有一個 TCP 連接到 host host.example.com

當它作為前台程序與後台或後面執行時,作業系統或外殼程序是否對這個程序進行了不同的處理screen

例如:

~ long_running_proc --connect host.example.com
...

對比

~ screen
~ long_running_proc --connect host.example.com
[ctrl-a] + d
~

對比

~ long_running_proc --connect host.example.com &
[1] 67539
~

是否有不同的規則來處理中斷或上下文切換?他們的優先級較低嗎?我是否更有可能通過篩選/後台程序獲得 TCP 超時?

一般來說,預設情況下,唯一的區別是,如果它在後台嘗試讀取(或寫入)tty,它將收到一個 SIGTTIN(或 SIGTTOU)信號。

關於優先級或更高上下文切換的其他差異取決於您的 shell(或screen),如果它願意做任何此類事情,例如更改程序的“nice”編號或可能將其綁定到一個特定的 CPU,並且該 CPU 恰好被中斷很多。通常,除非請求,否則 shell 不會做任何此類事情。

獲得 TCP 超時的更高機率可能與您的程序是否確實被上述信號之一停止(由於嘗試 tty 訪問)有關,在這種情況下,它沒有任何機會接收並因此回复網路流量。

如果你想到它,守護程序是可能的最“後台”程序,它們當然不是二等程序。

我不能確切地了解具體screen的分離操作,但它的文件說分離的程序繼續執行,並且將自身screen與程序的 tty 分離,因此該程序基本上繼續進行,與正常的前台或後台操作沒有區別。但是,如果您的互動式終端與程序的虛擬終端分離,那麼您在給它命令時會遇到困難。如果在某些時候它需要來自其終端的輸入,這可能對您的程序不利。

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