반환 코드 137로 인해 apt-get이 실패하는 원인은 무엇입니까?

반환 코드 137로 인해 apt-get이 실패하는 원인은 무엇입니까?

0adtravis-ci 서비스를 기반으로 구축하려고 하는데 추가 정보 없이 반환 코드 137과 함께 무작위로 apt-get install(또는 ) 오류가 발생합니다. apt-get dist-upgradetravis-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

프로세스의 신호/오류 반환 상태에 대한 답변... 음... 알겠습니다...

로부터세게 때리다 매뉴얼 페이지(그리고일반적으로~에최대쉘 문서), "라는 제목의 섹션 아래에 있습니다.쉘 그래머" 그런 다음 "간단한 명령", 다음과 같은 무고한 진술이 있습니다.

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

모든 셸(bash, sh, dash, ksh, csh 등) 프로세스(간단한 명령)의 반환 값은 8비트 부호 없는 값이며 예상 범위는 0-255입니다. 일반적인 사용 관습에서는 0을 '성공'으로 사용하고 그 밖의 모든 것을 '오류'로 사용합니다. 쉘은 신호 값에 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

아하! Wikipedia에 훌륭한 글이 있습니다.종료 상태, 특히셸 및 스크립트부분. 그것은 설명하는 동안기다려프로세스의 종료 상태는 정수(int)이고, 쉘 프로세스는 하위 8비트만 수신합니다. 또한 '128+n' 근거에 대해서도 설명합니다. (아마도 '256+n'을 사용하는 ksh에 대한 wikipedia 설명이 올바르지 않을 수 있습니다.ksh 매뉴얼 페이지'128+n'이라고 말합니다)

다양한 프로그래밍 언어와 인터페이스의 다양한 해석을 설명하는 Wikipedia 기사를 자세히 읽어보세요.

도움이 되었기를 바랍니다.

(그렇습니다. 저는 매뉴얼 페이지를 모두 읽었습니다. 그렇죠?)

부록:

트래비스-ci하다제안하다에게~ 아니다가상 머신에서 apt-get upgrade(및 확장하여 )을 사용합니다 . apt-get dist-upgrade원하는 것을 설치하세요. 하지만 VM은 일반적으로 잘 갖춰져 있고 최신 상태입니다.

사용apt-get upgrade 5월apt-get 수신에 기여했습니다시그킬. 추가 정보 없이트래비스-ci, 정확한 이유를 확인할 수 없습니다. 하지만 일반적으로...시그킬나쁜 일, 과도한 리소스 사용, 높은 CPU 사용 등을 했을 때 사용됩니다. 다시 한번 말씀드리지만, 우리가 본 로그에서는 알 수 없습니다. (여담으로 보세요.한도(bash 매뉴얼 페이지에서) 그리고setrlimit/getrlimit(2)그리고 다양한 한도가 어떻게 처리되는지...RLIMIT_CPU(또는-티) 여기가 적절한 것 같습니다)

답변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

관련 정보