當某個窗格處於複製模式時,tmux未從其tty讀取。如果某些在tty中運行「in」的程序繼續生成輸出,那麼操作系統的tty緩衝區將最終填充並導致寫入進程/線程阻塞。我不知道Node.js的內部,但它可能不希望寫入stdout/stderr來阻止:console
functions似乎沒有回調,所以它們可能實際上是阻塞的。
因此,如果您的SSH連接被刪除,Node.js最終可能會被阻止,如果它運行的窗格處於複製模式。
如果需要保證無阻塞日誌記錄,那麼你可能要重定向(或TEE)的輸出和錯誤的文件,並使用像less
東西,查看之前的日誌(避免TMUX的複製模式因爲它可能會導致阻塞)。
也許是這樣的:
# Redirect stdout/stderr to a file, running Node.js in the background.
# Start a "less +F" on the log so that we immediately have a "tail" running.
node app.js >>app.log 2>&1 & less +F app.log
或者
# This pane will act as a 'tail -f', but do not use copy-mode here.
# Instead, run e.g. 'less app.log' in another pane to review prior logs.
node app.js 2>&1 | tee -a app.log
或者,如果您使用的是日誌庫,它可能有東西,你可以用它來自動寫入文件。
嗯,什麼操作系統? – Brad
@Brad:Ubuntu 12.04.1 – Eric
@Eric從你的描述中,一切都應該起作用,所以這是你的代碼的問題。 – loganfsmyth