apt-get 失敗並回傳代碼 137 的原因是什麼?

apt-get 失敗並回傳代碼 137 的原因是什麼?

我正在嘗試建立0adtravis-ci 服務,但我隨機遇到apt-get install(或apt-get dist-upgrade) 失敗,回傳碼為 137,沒有任何進一步的資訊。 travis-ci 基於 Ubuntu 12.04。 137代表什麼?範例輸出可以在以下位置找到https://travis-ci.org/krichter722/0ad/jobs/92938434

更多系統資訊。

$ uname -a && lsb_release -a
Linux testing-worker-linux-89e97461-1-15272-linux-4-69692739 2.6.32-042stab090.5 #1 SMP Sat Jun 21 00:15:09 MSK 2014 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 12.04 LTS
Release:    12.04
Codename:    precise

答案1

關於進程的信號/錯誤返回狀態的答案...好吧...好吧...

來自重擊 手冊頁(和一般來說最多shell 文檔),在標題為“殼牌語法“ 進而 ”簡單指令”,有一個無辜的聲明如下:

The return value of a simple command is its exit status,
  or 128+n if the command is terminated by signal n.

任何 shell(bash、sh、dash、ksh、csh 等)進程(簡單指令)的回傳值都是 8 位元無符號值,預期範圍為 0-255。典型的使用習慣使用零 (0) 作為“成功”,其他任何值都作為“錯誤”。 shell 透過將 128 新增至訊號值並將其用作傳回值來指示進程已中斷/中止/發出訊號。

如果您夠老,您可能還記得在核心編譯期間收到「錯誤 139」(訊號 11)中止(它用過的需要整夜! )如果您有內存不穩定或過熱問題。

錯誤137表示apt-get進程收到了訊號9(128+9=137),訊號9是

如果您對訊號名稱與數字感到模糊,請查看命令的輸出kill -l

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
... lots more ... 64 total

啊哈!維基百科上寫得很精彩,在退出狀態,具體來說外殼和腳本部分。它解釋說,雖然等待進程行程的退出狀態是一個整數(int),shell行程只接收低8位元。它還談到了“128+n”的基本原理。 (也許維基百科關於 ksh 使用「256+n」的聲明是不正確的,因為ksh 手冊頁說“128+n”)

仔細閱讀維基百科文章,它解釋了不同程式語言和介面所做的各種解釋。

希望這可以幫助。

(是的,我確實閱讀了所有手冊頁,不是嗎?)

附錄:

特拉維斯-ci建議不是在虛擬機器中使用apt-get upgrade(並且透過擴展, )。apt-get dist-upgrade安裝你想要的東西,但虛擬機器通常庫存充足並且是最新的。

用於apt-get upgrade 可能為 apt-get 接收做出了貢獻信號殺死。沒有進一步的訊息特拉維斯-ci,我們無法確定具體原因。但是,通常...信號殺死當你做了壞事、資源使用過多、CPU 使用率過高等等時使用...同樣,我們不知道,無法從我們看到的日誌中看出。 (順便說一句,看看極限值(在 bash 手冊頁中),以及設定限制/取得限制(2)以及如何處理它的各種限制......RLIMIT_CPU(或者-t)在這裡似乎合適)

答案2

由於沒有來自 的錯誤訊息apt-get,我同意 @lornix 的想法。但我只預期檔案系統配額中的可用大小有問題,或者可能是 apt-get 的平行下載功能。 (預設情況下,它為每個來源使用一個執行緒)

這裡進行了相當優化,以最大限度地減少資源(但時間更長)

uname -a && lsb_release -a && df
sudo apt-get update
sudo apt-get install python-software-properties
sudo add-apt-repository --yes ppa:wfg/0ad.dev
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get remove oracle-java7-installer oracle-java8-installer postgresql-9.2 postgresql-contrib-9.2 postgresql-9.2-postgis-2.1 postgresql-9.3 postgresql-contrib-9.3 postgresql-9.3-postgis-2.1 postgresql-9.4 postgresql-contrib-9.4 postgresql-9.4-postgis-2.1 postgresql-9.1 postgresql-9.1-postgis-2.1 postgresql-9.1-postgis-scripts postgresql-9.2-postgis-scripts postgresql-9.3-postgis-scripts postgresql-9.4-postgis-scripts postgresql-client postgresql-client-9.1 postgresql-client-9.2 postgresql-client-9.3 postgresql-client-9.4 postgresql-client-common postgresql-common postgresql-contrib-9.1
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes upgrade
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes dist-upgrade

相關內容