왜 일부 프로그램은 즉시 쉘로 돌아가고 다른 프로그램은 실행이 완료 될 때까지하지 않습니까? gedit. 그러나 원자 코드 편집기를 열면

I가에서 읽고 현대 운영 체제의 명령이 실행될 때, 쉘이 자식 프로세스를 생성하는 책, 아이가 완성 된 실행을 가지고 다음 사용자에서 다른 명령을 기다립니다 때까지 기다립니다. 이것은 실제로 같은 많은 프로그램의 경우입니다 gedit. 터미널은 내가 닫을 때까지 명령을받지 않습니다 gedit. 그러나 원자 코드 편집기를 열면 셸이 즉시 반환되어 편집기를 실행해도 다음 명령을 수락 할 수 있습니다. 터미널을 닫아도 원자가 닫히지 않습니다 . 이것은 편집자가 하위 프로세스로 열지 않았 음을 의미합니까? 이를 가능하게하는 기본 메커니즘은 무엇입니까?

달리기 ps au | grep atom제공

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



답변

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

  1. 쉘에서 사용자와 상호 작용하는 프로그램
  2. 쉘에서 사용자와 상호 작용 하지 않는 프로그램 .

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

두 번째 경우는 더 복잡합니다. 일반적으로 프로그램은 포크 (메모리에 자신의 사본을 작성)하고 쉘의 제어 터미널 과의 연관을 제거하고 원래 쉘과 독립적으로 실행되는 다른 프로그램을 실행할 수 있습니다 . 두 번째 프로그램의 메시지가 표시 될 수도 있지만 일반적으로 사용자와 상호 작용하지는 않습니다. 사용 방법에 따라

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

더 읽을 거리 :


답변