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

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

나는 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

관련 정보