응용 프로그램을 올바르게 종료하지 않고 터미널 창을 닫는 것이 해로운가요?


18

Ubuntu 12.04 LTS를 사용하여 내 질문은 터미널 창에서 응용 프로그램을 시작하면 응용 프로그램을 올바르게 종료하지 않고 터미널 창을 닫는 데 나쁜 점이 있다는 것입니다. 예를 들어 MATLAB을 사용합니다. 터미널을 열고 타이핑

matlab -nodisplay -nodesktop -nosplash

그런 다음 많은 스크립트를 실행하십시오. 그럼 나도 할 수있어

exit

MATLAB을 종료 한 다음 터미널 창을 닫거나 터미널 창을 닫습니다. 이 두 방법의 차이점은 무엇입니까? 두 번째 방법은 어떻게 든 "해를 끼치나요"? 첫 번째 방법이 선호됩니까? 왜?

답변:


22

일반적으로이 방법으로 수행하는 것이 좋습니다.

"X"를 클릭하여 터미널 창을 닫으면 데스크탑 (GNOME, KDE 등)에서 터미널 응용 프로그램으로 "신호"를 보내 자체 종료하라는 메시지가 나타납니다. 이 셸에서 MATLAB을 실행하고 있기 때문에 터미널 응용 프로그램의 자식 프로세스로 간주됩니다.

따라서 부모 프로세스의 책임 중 하나는 자녀에게 이와 동일한 "신호"를 보내는 것입니다.

이제 방금 설명한 내용을 개념적으로 이해하면 실제 용어를 조금 더 대체 해 보겠습니다.

신호

먼저 "신호"를 사용하면 실제로 유닉스 프로세스로 보낼 수있는 서로 다른 신호 군 이 있습니다. 간단하게하기 위해 4 자주 볼거야, 거기에 SIGHUP, SIGTERM, SIGINT,와 SIGKILL.

  • SIGHUP

    SIGHUP 신호는 제어 터미널이 닫힐 때 프로세스로 전송됩니다. 원래 직렬 회선 삭제 프로세스에 알리도록 설계되었습니다. 현대 시스템에서이 신호는 일반적으로 의사 또는 가상 터미널 제어가 닫 혔음을 의미합니다.

  • 시그넘

    SIGTERM 신호는 프로그램 종료를 일으키는 데 사용되는 일반 신호입니다. SIGKILL과 달리이 신호는 차단, 처리 및 무시 될 수 있습니다. 프로그램을 정중하게 종료하는 일반적인 방법입니다.

  • 사인

    사용자가 INTR 문자 (일반적으로 Cc)를 입력하면 SIGINT ( "프로그램 인터럽트") 신호가 전송됩니다.

  • 시킬

    SIGKILL 신호는 프로그램을 즉시 종료시키는 데 사용됩니다. 처리하거나 무시할 수 없으므로 항상 치명적입니다. 이 신호를 차단할 수도 없습니다.

참고 : 프로그램 실행 중에 + 를 SIGINT사용 하여 명령 줄에서 프로그램을 "중단" 하면 전송됩니다 .CtrlC

어느 것이 사용되고 있습니까?

아마도 SIGTERM창 환경에서 호출되어 터미널로 전달되는 것 같습니다. 그러면 터미널이 SIGHUPMATLAB으로 전송 될 가능성이 높습니다 . 이 신호는 모든 프로세스에 로컬 정리 (파일 닫기, 프로세스 종료 등) 자체를 수행 할 수있는 기회를 제공합니다.

킬 명령

이름이 잘못된 명령을 사용하여 신호를 직접 보낼 수 있습니다 kill. 따라서 SIGTERM신호를 터미널이나 SIGHUP to MATLAB, you could determine their PID usingps에 보내려면 다음 명령을 실행하여 신호를 보내십시오.

$ 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거의 모든 프로세스를 죽일 수 있는 악명 높은 .


나는 항상 그 숫자가 음수라고 생각했지만 실제로는 명령 줄 인수입니다. 나는 새로운 것을 배웠다 : D
Thomas

1
HUP-HangUP-터미널에 대해 "줄을 느슨하게"보낸 경우 (예 : 모뎀으로 Unix 서버에 연결 한 경우) 전송되는 신호입니다. 아마도 프로세스를 종료하는 가장 "부드러운"신호일 것입니다. 대부분의 데몬은 종료되지 않고 HUP에서 구성 파일을 다시 읽습니다. nohup 명령을 사용하면 쉘이 닫힌 후 백그라운드 프로세스를 계속할 수 있습니다. screen과 같은 명령은 행업을 유지하고 HUP에서 명령을 격리시킵니다.
Baard Kopperud

@BaardKopperud-고마워, 나는 의도적으로 HUP를 버리고 토론을 혼란스럽게하고 싶지 않았습니다.
slm

@BaardKopperud- "SIGHUP 신호는 제어 터미널이 닫힐 때 프로세스로 전송됩니다. 원래 직렬 라인 드롭 프로세스를 알리기 위해 설계되었습니다. 현대 시스템에서는이 신호가 일반적으로 의사 또는 가상 터미널 제어가 닫 혔음을 의미합니다. "설명에 약간의 거짓말을했지만 간단하게 유지하려고했습니다.
slm

@BaardKopperud-죄책감을 느꼈으므로 진행 상황을보다 정확하게 반영하도록 답변을 수정했습니다. 감사!
slm

2

가능하지만 열려있는 응용 프로그램에 따라 데이터가 손실됩니다. 예를 들어 파일 편집기가 열려 있으면 제대로 저장하고 종료하지 않으면 일부 변경 내용이 손실 될 수 있습니다. 걱정되는 경우 터미널을 올바르게 로그 아웃 / 종료하십시오. 당신이 입력 마음에 들지 않으면 exit또는 logout단지 시도 Ctrl-D.


왜 더 나을까요? 이 응용 프로그램은 SIGTERM 대신 SIGHUP을 얻지 만 여전히 신호에 의해
강제

까지는 Ctrl-D실제로 명령 프롬프트에서만 적용됩니다.
Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.