저는 bash를 처음 접했고 약 한 달 동안 계속 사용해 왔습니다.
중첩된 명령 그룹이 작동하는 방식을 이해하려고 노력하면서 다음을 시도했습니다.
((ps j; ps j); ps j; ps j)
이제 내가 기대하는 것은 중첩된 그룹이 새로운 bash 쉘을 그룹 리더로 사용하여 별도의 프로세스 그룹을 생성한다는 것입니다. 새로운 bash 쉘이 생성되었지만 어떤 이유로 중첩된 bash 쉘은 그 위의 bash 쉘과 동일한 프로세스 그룹에 있습니다.
왜 이런거야? 프로세스 정보를 정적으로 보려고 하기 때문일까요?
답변1
첫 번째 추측으로, 나는 ( .. )
사용하지 않는 것으로 시작하는 서브 쉘을 가정하고 있습니다.직업 통제, 비대화형 스크립트가 이를 수행하지 않는 것처럼. 그러나 작업 제어(및 상호 작용)를 위해 $-
괄호도 포함된 것 같습니다 .m
i
$ 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