![한 프로세스 그룹에서 다른 프로세스 그룹으로 프로세스를 이동하려면 어떻게 해야 하며, 각 프로세스 그룹의 프로세스를 어떻게 나열합니까?](https://linux55.com/image/121283/%ED%95%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B7%B8%EB%A3%B9%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B7%B8%EB%A3%B9%EC%9C%BC%EB%A1%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%98%EB%A9%B0%2C%20%EA%B0%81%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B7%B8%EB%A3%B9%EC%9D%98%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%82%98%EC%97%B4%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
답변1
사용자 또는 일반적인 프로그래머의 관점에서 보면 프로세스를 한 그룹에서 다른 그룹으로 이동할 수 없습니다. 프로세스 그룹을 구성하는 것은 쉘의 임무입니다. 작업을 대화형으로 실행하면 셸은 해당 작업을 자체 그룹에 넣습니다. 이것의 주요 목적은 Ctrl사용자가 + 를 누를 때 전체 그룹(예: 파이프의 모든 프로세스)을 종료하는 것 입니다 C.
보다 일반적으로 프로세스 그룹이 수행할 수 있는 작업 중 하나는 프로세스 그룹을 원자적으로 종료하는 것입니다. 일부 프로세스를 나열한 다음 종료하려고 하면 프로세스 중 하나가 중간에 분기될 수 있습니다. 프로세스 그룹을 종료하면 포크 중이더라도 그룹의 모든 프로세스도 종료됩니다.
사용자 또는 애플리케이션 프로그래머로서 때때로 하고 싶은 일 중 하나는 자체 그룹에서 새 프로세스를 실행하는 것입니다. 이 작업을 수행하는 사용자 수준 명령은 없습니다. 대화형 셸을 시작하면 이 작업을 수행할 수 있습니다. (바라보다쉘 스크립트 시간 초과복잡한 예를 들어 보겠습니다. ) 및 다음과 같은 기타 명령timeout
유용GNU coreutils 및 Linux에서setsid
유용작업의 일부로 새 프로세스 그룹을 생성하는 util-linux 제품군에서.
프로세스를 다른 프로세스 그룹으로 이동하는 시스템 호출은 다음과 같습니다.setpgid
. (이라는 부분 별칭도 있습니다 setpgrp
.) 몇 가지 제한 사항이 있습니다. 프로세스 자체 또는 해당 상위에서만 호출할 수 있으며 대상 그룹은 원래 그룹과 동일한 세션에 있어야 합니다. 한 그룹에서 다른 그룹으로 프로세스를 마음대로 이동할 수는 없습니다.
그룹의 프로세스를 열거하는 구체적인 방법은 없습니다. 당신이 할 수 있는 일은 모든 프로세스를 열거하고 해당 특정 그룹의 프로세스를 선택하는 것뿐입니다. ps
이 열을 포함하여 출력에 프로세스 그룹을 나열 할 수 있습니다 pgid
(예 : ).ps -e -o pid,ppid,pgid,args