Ubuntu 12.04 LTS를 사용할 때 제 질문은 터미널 창에서 응용 프로그램을 시작하면 먼저 응용 프로그램을 제대로 종료하지 않고 터미널 창을 닫는 데 문제가 있습니까? 예를 들어 저는 MATLAB을 사용합니다. 터미널을 열고 입력합니다
matlab -nodisplay -nodesktop -nosplash
그런 다음 여러 스크립트를 실행하십시오. 그럼 난 할 수 있어
exit
MATLAB을 종료한 다음 터미널 창을 닫거나 터미널 창만 닫습니다. 이 두 가지 방법의 차이점은 정확히 무엇입니까? 두 번째 접근 방식이 "해를 끼치는" 것이 있습니까? 첫 번째 방법이 선호됩니까? 왜?
답변1
일반적으로 말하면 이 정도는 괜찮을 것입니다.
"X"를 클릭하여 터미널 창을 닫으면 데스크탑(GNOME, KDE 등)에서 터미널 응용 프로그램으로 "신호"가 전송되어 자체적으로 닫히도록 지시합니다. 이 셸에서 MATLAB을 실행하고 있으므로 터미널 응용 프로그램의 하위 프로세스로 간주됩니다.
따라서 상위 프로세스로서의 책임 중 하나는 동일한 종료 "신호"를 하위 프로세스에 보내는 것입니다.
이제 방금 설명드린 내용을 개념적으로 이해하셨다면, 좀 더 실용적인 용어로 대체해 보겠습니다.
신호
첫 번째는 실제로 "신호"입니다.일련의 다양한 신호Unix 프로세스로 보낼 수 있습니다. 간단하게 설명하기 위해 자주 볼 수 있는 4개, SIGHUP
, SIGTERM
및 SIGINT
가 있습니다 SIGKILL
.
한숨을 쉬다
SIGHUP 신호는 제어 터미널이 닫힐 때 프로세스로 전송됩니다. 원래는 직렬 회선 손실 프로세스를 알리기 위해 설계되었습니다. 최신 시스템에서 이 신호는 일반적으로 제어 의사 또는 가상 터미널이 닫혀 있음을 의미합니다.
신호 용어
SIGTERM 신호는 프로그램을 종료시키는 데 사용되는 범용 신호입니다. SIGKILL과 달리 이 신호는 차단, 처리 및 무시될 수 있습니다. 이는 프로그램 종료를 정중하게 요청하는 일반적인 방법입니다.
지능을 신호하다
사용자가 INTR 문자(보통 Cc)를 입력하면 SIGINT("프로그램 인터럽트") 신호가 전송됩니다.
신호 살해
SIGKILL 신호는 프로그램을 즉시 종료시키는 데 사용됩니다. 처리하거나 무시할 수 없으므로 항상 치명적입니다. 신호를 차단하는 것도 불가능합니다.
노트: SIGINT
프로그램이 실행되는 동안 명령줄에서 프로그램을 "중단"하기 위해 +를 사용할 Ctrl때 전송되는 것 입니다.C
어느 것이 사용되고 있나요?
대부분의 경우 SIGTERM
창 환경에서 호출되어 터미널로 전달됩니다. 터미널이 MATLAB으로 전송될 가능성이 높습니다 SIGHUP
. 이 신호는 모든 프로세스에 로컬 정리(파일 닫기, 프로세스 종료 등)를 스스로 수행할 수 있는 기회를 제공합니다.
kill 명령
잘못된 이름의 명령을 사용하여 신호를 직접 보낼 수 있습니다 kill
. 따라서 SIGTERM
터미널이나 SIGHUP to MATLAB, you could determine their PID using
ps`에 신호를 보내려면 다음 명령을 실행하여 신호를 보내십시오.
$ kill -SIGTERM <PID>
아니면 이거:
$ kill -SIGHUP <PID>
다음을 사용하여 전체 신호 목록을 얻을 수 있습니다.
$ 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
...
...
신호에 숫자가 있다는 것을 알 수 있습니까? 이름 대신 다음과 같이 사용되는 것을 자주 볼 수 있습니다.
$ kill -15 <PID>
또는 악명 높게 -9
도 거의 모든 프로세스를 종료할 수 있습니다.
답변2
이 방법은 괜찮을 가능성이 높지만 어떤 앱을 여는지에 따라 데이터가 손실될 수 있습니다. 예를 들어 파일 편집기가 열려 있는 경우 올바르게 저장하고 종료하지 않으면 일부 변경 사항이 손실될 수 있습니다. 걱정되시면 터미널에서 제대로 로그아웃/종료하시면 됩니다. 타이핑을 좋아하지 않거나 그냥 시도해 exit
보세요 .logout
Ctrl-D