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