답변1
사용자 또는 일반적인 프로그래머의 관점에서 보면 프로세스를 한 그룹에서 다른 그룹으로 이동할 수 없습니다. 프로세스 그룹을 구성하는 것은 쉘의 임무입니다. 작업을 대화형으로 실행하면 셸은 해당 작업을 자체 그룹에 넣습니다. 이것의 주요 목적은 Ctrl사용자가 + 를 누를 때 전체 그룹(예: 파이프의 모든 프로세스)을 종료하는 것 입니다 C.
보다 일반적으로 프로세스 그룹이 수행할 수 있는 작업 중 하나는 프로세스 그룹을 원자적으로 종료하는 것입니다. 일부 프로세스를 나열한 다음 종료하려고 하면 프로세스 중 하나가 중간에 분기될 수 있습니다. 프로세스 그룹을 종료하면 포크 중이더라도 그룹의 모든 프로세스도 종료됩니다.
사용자 또는 애플리케이션 프로그래머로서 때때로 하고 싶은 일 중 하나는 자체 그룹에서 새 프로세스를 실행하는 것입니다. 이 작업을 수행하는 사용자 수준 명령은 없습니다. 대화형 셸을 시작하면 이 작업을 수행할 수 있습니다. (바라보다쉘 스크립트 시간 초과복잡한 예를 들어 보겠습니다. ) 및 다음과 같은 기타 명령timeout
유용GNU coreutils 및 Linux에서setsid
유용작업의 일부로 새 프로세스 그룹을 생성하는 util-linux 제품군에서.
프로세스를 다른 프로세스 그룹으로 이동하는 시스템 호출은 다음과 같습니다.setpgid
. (이라는 부분 별칭도 있습니다 setpgrp
.) 몇 가지 제한 사항이 있습니다. 프로세스 자체 또는 해당 상위에서만 호출할 수 있으며 대상 그룹은 원래 그룹과 동일한 세션에 있어야 합니다. 한 그룹에서 다른 그룹으로 프로세스를 마음대로 이동할 수는 없습니다.
그룹의 프로세스를 열거하는 구체적인 방법은 없습니다. 당신이 할 수 있는 일은 모든 프로세스를 열거하고 해당 특정 그룹의 프로세스를 선택하는 것뿐입니다. ps
이 열을 포함하여 출력에 프로세스 그룹을 나열 할 수 있습니다 pgid
(예 : ).ps -e -o pid,ppid,pgid,args