일부 프로그램은 즉시 셸로 돌아가는 반면 다른 프로그램은 실행이 완료될 때까지 반환되지 않는 이유는 무엇입니까?

일부 프로그램은 즉시 셸로 돌아가는 반면 다른 프로그램은 실행이 완료될 때까지 반환되지 않는 이유는 무엇입니까?

내가 읽고최신 운영 체제책에서는 명령이 실행되면 쉘이 하위 프로세스를 생성하고 하위 프로세스가 실행을 완료할 때까지 기다린 다음 사용자가 실행한 다른 명령을 기다린다고 말합니다. .geditgedit​그러나 내가 열 때원자편집기가 실행 중이면 셸은 즉시 반환되어 편집기가 실행되는 동안에도 다음 명령을 받아들일 준비가 됩니다. 터미널 닫기확실히원자를 닫습니다. 이는 편집기가 하위 프로세스로 열리지 않는다는 의미입니까? 이를 가능하게 하는 기본 메커니즘은 무엇입니까?

달리는ps au | grep atom

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom

답변1

이 질문은 두 가지 유형의 프로그램에 대해 묻습니다.

  1. 셸에서 사용자와 상호 작용하는 프로그램
  2. 다음을 수행하는 프로그램아니요셸에서 사용자와 상호작용합니다.

첫 번째 경우, 셸에서 사용자와 상호 작용하는 프로그램은 셸에 제어권을 반환하기 전에 완료될 때까지 실행되도록 설계되었습니다. 특별한 일은 없습니다.

두 번째 상황은 더 복잡합니다. 일반적으로 프로그램은십자가(메모리에 자신을 복사하고) 제거할 셸과의 연결을 준비합니다.제어 터미널, 그리고 아마도구현하다다른 프로그램 - 원래 쉘과 독립적으로 실행됩니다. 두 번째 프로그램의 메시지를 볼 수 있지만 일반적으로 사용자와 상호 작용하지는 않습니다. 사용량에 따라

  • 악마(서버) 프로세스 또는
  • 프로그램이 새 창에서 실행될 수 있습니다. 그래픽 편집자는 후자를 수행합니다.

추가 자료:

관련 정보