postgres 명령에서 종료 코드 130은 무엇을 의미합니까?

postgres 명령에서 종료 코드 130은 무엇을 의미합니까?

명령을 사용하여 PostgreSQL 서버를 시작하려고 하면 /usr/pgsql-9.2/bin/postgres종료 값 code 가 표시됩니다 130.

하지만 이 명령의 종료 코드에 대한 문서를 찾을 수 없습니다. 무슨 뜻이에요 130?

참고로 이 명령은 Java 코드에서 실행되며 기본적으로 다음과 같습니다.

Process dbProcess = Runtime.getRuntime().exec(cmd);
...
int exitCode = dbProcess.exitValue();

답변1

Linux 및 OpenJDK 사용적어도 반환된 값은 exitValue()or 와 같은 쉘과 대부분의 구현( or 는 아님)이 해당 변수에 할당하는 값과 동일합니다.zshbashshksh93yash$?

즉, 다음과 같습니다.

  • 프로세스가 다음의 하위 8비트로 종료되는 경우 exit(n): ( return n) .main()nn & 0xFF
  • 프로세스가 신호에 의해 종료되는 경우 n: n + 128.

따라서 숫자 130을 얻으면 프로세스가 신호 2로 종료되었는지 아니면 방금 실행되었는지 알 수 없기 때문에 모호성이 있습니다 exit(130).

그러나 많은 쉘은 갖는 규칙을 따르기 때문에 128 + signal_number프로그램은 종료 코드로 128보다 높은 값을 사용하지 않는 것을 알고 있습니다(또는 그렇게 할 때 exit(130)누군가와 같이 신호 2로 인해 사망한 어린이의 사망을 보고하는 것입니다 어떤 경우에는 껍질).

따라서 여기서 프로세스는 신호 2로 인해 종료될 가능성이 높습니다. 다음 명령을 실행하여 신호가 무엇인지 알 수 있습니다.

$ kill -l 130
INT

POSIX 스타일 쉘의 프롬프트에서.

대부분의 시스템에서 신호 2는 SIGINT입니다. 이는 터미널에서 Ctrl-C를 눌렀을 때 터미널의 전경 프로세스 그룹으로 전송되는 신호입니다.

$ sleep 10
^C
$ echo "$?"
130

SIGINT는 터미널 인터럽트를 위해 예약되어야 하며 애플리케이션은 이를 다른 프로세스로 전송해서는 안 되지만 그렇게 하는 것을 막을 수 있는 방법은 없으므로 kill(postgres_pid, SIGINT)( kill -s INT또는 셸에서) 여전히 문제가 발생할 가능성이 있습니다 kill -INT.kill -2

$ sleep 10 &
[1] 20171
$ kill -s INT "$!"
[1]  + interrupt  sleep 10
$ wait "$!"
$ echo "$?"
130

관련 정보