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
답변
이 질문은 두 가지 유형의 프로그램에 대해 묻습니다.
- 쉘에서 사용자와 상호 작용하는 프로그램
- 쉘에서 사용자와 상호 작용 하지 않는 프로그램 .
첫 번째 경우, 셸에서 사용자와 상호 작용하는 프로그램은 셸로 제어를 반환하기 전에 완료 될 때까지 실행되도록 설계되었습니다. 특별한 것은 없습니다.
두 번째 경우는 더 복잡합니다. 일반적으로 프로그램은 포크 (메모리에 자신의 사본을 작성)하고 쉘의 제어 터미널 과의 연관을 제거하고 원래 쉘과 독립적으로 실행되는 다른 프로그램을 실행할 수 있습니다 . 두 번째 프로그램의 메시지가 표시 될 수도 있지만 일반적으로 사용자와 상호 작용하지는 않습니다. 사용 방법에 따라
- 데몬 (서버) 프로세스 또는
- 프로그램이 새 창에서 실행될 수 있습니다. 그래픽 편집자는 후자를 수행합니다.
더 읽을 거리 :