bash 쉘의 모든 작업은 정확히 하나의 세션을 구성합니까?

bash 쉘의 모든 작업은 정확히 하나의 세션을 구성합니까?

프로세스, 프로세스 그룹, (프로세스 그룹) 세션은 Linux 개념입니다.

내 말이 맞다면 bash 쉘에서 시작된 프로세스 그룹을 작업이라고 합니다.

bash 쉘에서 시작된 모든 작업은 정확히 하나의 세션을 형성합니까? "정확하다"는 것은 그 이상도 그 이하도 아닙니다.

답변1

모든 쉘 프로세스가 아니라 하나만로그인쉘은 새 세션을 생성합니다(자세한 내용은 아래 참조). 처음에 세션에는 분명히 하나의 멤버, 즉 셸 자체만 있습니다. 새로 분기된 각 프로세스는 자동으로 동일한 세션에 속합니다. 프로세스는 를 사용하여 새 세션을 생성하여 세션에서 자신을 제거할 수 있습니다 setsid(). 프로세스가 세션을 변경하는 다른 방법은 없습니다.

요약:

세션 멤버 = 로그인 쉘
    모든 하위 프로세스(및 해당 하위 프로세스 등)
    자체 세션의 하위 프로세스를 생성하는 것 외에도

남은 질문은 쉘에 의해 생성된 모든 프로세스가 항상 "작업", 즉 명령당 하나의 프로세스 그룹으로 시작되는지 여부입니다. 이는 일반적으로 사실이지만 비대화형 쉘에 적용되는지는 확실하지 않습니다.


고쳐 쓰다

이 질문은 에 관한 것이지만 bash작업 제어 기능이 있는 다른 유사한 명령줄 지향 쉘에서도 마찬가지입니다.

@StéphaneChazelas가 지적했듯이 세션은 터미널 또는 의사 터미널 장치 로그인을 관리하는 프로그램에 의해 생성됩니다. 세션은 해당 터미널과 엄격하게 관련되어 있습니다.

파일의 해당 레코드에서 자신의 쉘 프로그램을 판별하려면 먼저 사용자가 로그인해야 합니다 passwd. 쉘이 exec수정되었습니다. PID는 변경되지 않은 상태로 유지됩니다. 따라서 사용자의 로그인 쉘이 되는 프로세스 내에서 세션이 생성됩니다.

관련 정보