작업 제어를 쉘 스크립트로 활성화하면 (set -m
사용) 더 이상 프로세스 신호를 잡을 수 없습니다. 나는 위의 코드를 실행하고 나는 예를 Ctrl + C에 대한 누르면작업 제어가 스크립트에서 활성화되면 프로세스 신호를 잡을 수없는 이유는 무엇입니까?
#!/bin/bash
set -m
for i in `seq 15`; do
trap 'echo " Signal $i catched"' $i
done
while true; do
echo " Waiting for a process signal"
sleep 999
done
, 아무 일도 발생하지 : 다음 코드를 살펴보세요 그러나
Waiting for a process signal
^CWaiting for a process signal
을, 나는 set -m
을 삭제하는 동일한 코드를 실행할 때
Waiting for a process signal
^C Signal 15 catched
내 질문
은 다음과 같습니다 :-
, 나는 대답을받을 수 있나요
- 왜 작동하지 않습니까?
- 작업 제어가 활성화되면 프로세스 신호를 잡을 수 있습니까?
참고 : sleep
대신 read
을 사용하면 모든 프로세스에서 문제가 발생하지만 작동하지 않습니다.
왜 처음부터 스크립트에서 작업 제어를 사용 하시겠습니까? – Barmar
작업 제어는 쉘이 아닌 다른 프로세스 그룹에서 외부 프로그램을 실행하여 작동합니다. 키보드 신호는 포 그라운드 프로세스 그룹에만 보내지고 프로그램이 실행되는 동안 쉘은 포 그라운드 그룹에 있지 않습니다. – Barmar
@Barmar 일부 경우 작업 제어는 스크립트에서 유용합니다. 예를 들어, 백그라운드에서 새 프로세스를 시작할 때 미래에 전체 프로세스 그룹을 제거해야한다면 그렇게 할 수 없습니다. 작업 제어가 사용 가능하지 않으면 새 프로세스 그룹이 작성되지 않으므로 작성된 모든 프로세스가 현재 그룹에 속하게됩니다. – Luisg123v