프로세스 플래그 1: 분기되었지만 실행되지 않음(사용 사례?)

프로세스 플래그 1: 분기되었지만 실행되지 않음(사용 사례?)

ps의 매뉴얼 페이지에는 프로세스 플래그 1이 "프로세스가 분기되었지만 실행되지 않음"으로 나열되어 있습니다. 이 상태의 프로세스에 대한 일반적인 사용 사례/시나리오는 무엇입니까?

답변1

이 문장은 다음을 가리킨다.fork그리고exec시스템 호출 1. 시스템 fork호출은 호출 프로세스를 복사하여 새 프로세스를 생성합니다. 실행 후에는 fork각각 자체 메모리를 가진 두 개의 프로세스가 있으며 fork해당 내용은 시스템 호출의 반환 값, 프로세스 ID 및 기타 일부를 제외하고 처음에는 동일합니다. 차이점. 시스템 exec호출은 파일에서 프로그램 이미지를 로드하고 기존 프로세스의 메모리를 이미지로 대체합니다.

프로그램을 실행하는 일반적인 방법은 fork프로그램을 실행할 새 프로세스를 만든 다음 exec하위 프로세스를 호출하여 원본 프로그램의 복사본을 새 프로그램의 코드 및 데이터로 바꾸는 것입니다. 이는 가장 일반적인 사용법입니다 (일반적 으로 파일 리디렉션 설정과 같이 fork이전에 수행된 일부 작업 ).exec

execa를 실행하지 않고 실행하는 것은 +를 실행한 후 즉시 부모가 실행하도록 fork하는 최적화로 간주될 수 있습니다 . + /는 결과 프로그램의 부모를 변경하는 반면 Straight는 그렇지 않기 때문에 정확히 동일하지 않습니다 .forkexecexitforkexecexitexec

Linux의 프로세스 플래그 1은 exec해당 프로그램의 원래 프로세스의 하위(또는 손자 등)인 상위 프로세스에 의해 분기되었기 때문에 호출되지 않은 프로세스를 나타냅니다. fork부르지 않고 부르는 것은 exec많은 용도가 있습니다. (이것은 전체 목록이 아니며 일반적인 사용 사례 중 일부입니다.)

  • 일부 프로그램은 여러 프로세서를 사용합니다. 이는 동일한 프로세스에서 여러 스레드를 실행하거나(모든 스레드가 메모리를 공유함) 각 프로세서에서 별도의 프로세스를 실행하여(그러면 메모리를 공유하지 않음) 수행할 수 있습니다.
  • 별도의 프로세스를 실행하는 것은 특정 작업을 격리하는 방법입니다. 예를 들어 Chrome은 각 탭 또는 탭 그룹을 별도의 프로세스에 유지합니다. 이렇게 하면 탭이 멈추거나 충돌하거나 웹페이지가 보안 취약점을 유발하는 경우에도 다른 프로세스에 표시되는 탭에 영향을 주지 않습니다. 별도의 프로세스를 사용하여 다양한 권한으로 다양한 작업을 수행할 수도 있습니다. 예를 들어 OpenSSH 서버는 대부분의 코드를 권한이 없는 사용자로 실행하고 최종 로그인 단계만 루트로 수행합니다. 쉘은 fork구현 에 사용됩니다서브쉘(스크립트 내의 변수, 리디렉션 등은 메인 스크립트의 일부에 영향을 미치지 않습니다.)
  • 악마일반적으로 "이중 포크"로 시작합니다. 프로그램이 실행될 때 가장 먼저 하는 일은 fork상위 프로그램이 종료되는 것입니다. 이는 위에서 언급한 "최적화"와 반대됩니다 exec. 데몬 프로세스는 원래 상위 프로세스에서 데몬 프로세스를 격리하기 위해 수행됩니다. 특히 하위 프로세스가 완료될 때까지 기다리는 동안 원래 상위 프로세스를 차단하지 않기 위해(예: 그렇지 않은 경우) 셸에서 프로그램을 실행합니다 &.

¹ 여기서 중요하지 않고 이 답변의 범위를 벗어나는 몇 가지 미묘한 차이가 있습니다.

관련 정보