한 프로세스 그룹에서 다른 프로세스 그룹으로 프로세스를 이동하려면 어떻게 해야 하며, 각 프로세스 그룹의 프로세스를 어떻게 나열합니까?

한 프로세스 그룹에서 다른 프로세스 그룹으로 프로세스를 이동하려면 어떻게 해야 하며, 각 프로세스 그룹의 프로세스를 어떻게 나열합니까?

지금까지 내가 알고 있는 바에 따르면, 터미널에는 하나의 세션만 있고, 세션에는 하나 이상의 프로세스 그룹이 있으며, 프로세스 그룹에는 하나 이상의 프로세스가 있습니다.

아래 이미지는 이를 보여줍니다.

여기에 이미지 설명을 입력하세요.

두 가지 질문이 있습니다.

  1. 한 프로세스 그룹에서 다른 프로세스 그룹으로 프로세스를 이동하는 방법은 무엇입니까?
  2. 각 프로세스 그룹의 프로세스를 나열하는 방법은 무엇입니까?

편집하다:프로그래밍 방식이 아닌 터미널에서 이 두 가지 작업을 수행하는 방법을 의미합니다.

답변1

사용자 또는 일반적인 프로그래머의 관점에서 보면 프로세스를 한 그룹에서 다른 그룹으로 이동할 수 없습니다. 프로세스 그룹을 구성하는 것은 쉘의 임무입니다. 작업을 대화형으로 실행하면 셸은 해당 작업을 자체 그룹에 넣습니다. 이것의 주요 목적은 Ctrl사용자가 + 를 누를 때 전체 그룹(예: 파이프의 모든 프로세스)을 종료하는 것 입니다 C.

보다 일반적으로 프로세스 그룹이 수행할 수 있는 작업 중 하나는 프로세스 그룹을 원자적으로 종료하는 것입니다. 일부 프로세스를 나열한 다음 종료하려고 하면 프로세스 중 하나가 중간에 분기될 수 있습니다. 프로세스 그룹을 종료하면 포크 중이더라도 그룹의 모든 프로세스도 종료됩니다.

사용자 또는 애플리케이션 프로그래머로서 때때로 하고 싶은 일 중 하나는 자체 그룹에서 새 프로세스를 실행하는 것입니다. 이 작업을 수행하는 사용자 수준 명령은 없습니다. 대화형 셸을 시작하면 이 작업을 수행할 수 있습니다. (바라보다쉘 스크립트 시간 초과복잡한 예를 들어 보겠습니다. ) 및 다음과 같은 기타 명령timeout유용GNU coreutils 및 Linux에서setsid유용작업의 일부로 새 프로세스 그룹을 생성하는 util-linux 제품군에서.

프로세스를 다른 프로세스 그룹으로 이동하는 시스템 호출은 다음과 같습니다.setpgid. (이라는 부분 별칭도 있습니다 setpgrp.) 몇 가지 제한 사항이 있습니다. 프로세스 자체 또는 해당 상위에서만 호출할 수 있으며 대상 그룹은 원래 그룹과 동일한 세션에 있어야 합니다. 한 그룹에서 다른 그룹으로 프로세스를 마음대로 이동할 수는 없습니다.

그룹의 프로세스를 열거하는 구체적인 방법은 없습니다. 당신이 할 수 있는 일은 모든 프로세스를 열거하고 해당 특정 그룹의 프로세스를 선택하는 것뿐입니다. ps이 열을 포함하여 출력에 프로세스 그룹을 나열 할 수 있습니다 pgid(예 : ).ps -e -o pid,ppid,pgid,args

관련 정보