Shell
螢幕內的程序與前台程序的處理方式是否不同?
假設我有一個長時間執行的程序,
long_running_proc
只有一個 TCP 連接到 hosthost.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 分離,因此該程序基本上繼續進行,與正常的前台或後台操作沒有區別。但是,如果您的互動式終端與程序的虛擬終端分離,那麼您在給它命令時會遇到困難。如果在某些時候它需要來自其終端的輸入,這可能對您的程序不利。