중첩된 명령 그룹은 중첩된 프로세스 그룹을 생성하지 않습니까?

중첩된 명령 그룹은 중첩된 프로세스 그룹을 생성하지 않습니까?

저는 bash를 처음 접했고 약 한 달 동안 계속 사용해 왔습니다.

중첩된 명령 그룹이 작동하는 방식을 이해하려고 노력하면서 다음을 시도했습니다.

((ps j; ps j); ps j; ps j)

이제 내가 기대하는 것은 중첩된 그룹이 새로운 bash 쉘을 그룹 리더로 사용하여 별도의 프로세스 그룹을 생성한다는 것입니다. 새로운 bash 쉘이 생성되었지만 어떤 이유로 중첩된 bash 쉘은 그 위의 bash 쉘과 동일한 프로세스 그룹에 있습니다.

왜 이런거야? 프로세스 정보를 정적으로 보려고 하기 때문일까요?

답변1

첫 번째 추측으로, 나는 ( .. )사용하지 않는 것으로 시작하는 서브 쉘을 가정하고 있습니다.직업 통제, 비대화형 스크립트가 이를 수행하지 않는 것처럼. 그러나 작업 제어(및 상호 작용)를 위해 $-괄호도 포함된 것 같습니다 .mi

$ echo $-
himuBs
$ bash -c 'echo $-'
hBc
$ ( echo $-; )
himuBs

그러나 작업 제어를 명시적으로 활성화하면 일부 프로세스 그룹이 나타나기 때문에 이것이 약간 거짓말이라고 생각합니다.

이것들은 모두 PG에 있습니다:

$  ( (ps j; ps j); ps j;) | awk 'NR == 1 || /[p]s/'
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
32524 32525 32522 32368 pts/23   32522 R+    1000   0:00 ps j
32524 32526 32522 32368 pts/23   32522 R+    1000   0:00 ps j
32522 32527 32522 32368 pts/23   32522 R+    1000   0:00 ps j

이것들은 다음이 아닙니다:

$ ( set -m; (ps j; ps j); ps j;) | awk 'NR == 1 || /[p]s/'
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
32518 32519 32518 32368 pts/23   32516 R     1000   0:00 ps j
32518 32520 32518 32368 pts/23   32516 R     1000   0:00 ps j
32516 32521 32521 32368 pts/23   32516 R     1000   0:00 ps j

관련 정보