Bash 내장 기능이 CPU를 100%까지 태울 때까지 기다립니다.

Bash 내장 기능이 CPU를 100%까지 태울 때까지 기다립니다.

적어도 그 일은 일어났습니다.GNU 배쉬 버전 4.3.42 x86_64&&GNU 배쉬 버전 4.3.11 x86_64

sleep & wait $!단순히 sleep신호를 통해 중단하는 대신sleepSIGUSR1). 그런데 wait다음 명령을 실행하면 bash-builtin이 이상하게 동작하는 것 같습니다.

터미널 1:

cat <(
   trap 'echo SIGUSR1' SIGUSR1;
   echo $BASHPID;
   while :;do
       sleep 1 &
       wait $!;
       echo test;
   done
   )&

NO2. 터미널:

kill -10 /the pid of the subshell, printed by the previous command/

터미널 1:

^C (ctrl + C)

그런 다음 하위 쉘이 CPU를 100% 소비하게 되었습니다.

터미널 1:

pkill -P $(pgrep -P $$)

왜 이런 동작이 발생하는지 아시나요?

알아채다cat <(/subshell/): 백그라운드에 있지 않을 때는 문제가 없습니다.


이 행동을 경험하는 또 다른 방법

터미널 1:

(
   trap 'echo SIGUSR1' SIGUSR1;
   echo $BASHPID;
   while :;do
       sleep 1 &
       wait $!;
       echo test;
   done
)&

NO2. 터미널:

kill -10 /the pid of the subshell, printed by the previous command/

터미널 1:

fg
^C (ctrl + C)

그런 다음 냉동 껍질을 얻으십시오.


이 동작을 경험하는 세 번째 방법

터미널 1:

(
   trap 'echo SIGUSR1' SIGUSR1;
   echo $BASHPID;
   while :;do
       sleep 1 &
       wait $!;
       echo test;
   done
)

NO2. 터미널:

kill -10 /the pid of the subshell, printed by the previous command/

터미널 1:

^C (ctrl + C)

그런 다음 냉동 껍질을 얻으십시오.

답변1

관찰 결과

  • ctrl+cSIGINT터미널 1의 fg-process로 보내기
  • 따라서 터미널 2에서 실행하는 것은 터미널 1에서 kill -2 <PID>실행하는 것과 동일 합니다.ctrl+c
  • 위의 두 가지 중 하나를 수행하십시오.앞으로kill -10 <PID>제2터미널에서 SIGINT올바른 처리를 실시합니다.
  • 행위뒤쪽에kill -10 <PID>터미널 2에서 실행(신호 보내기 SIGUSR1)이 SIGINT올바르게 처리되지 않아 문제가 있는 동작이 발생합니다.
  • kill -2 <PID>터미널 2에서 ( )를 ( ) 또는 ( ) SIGINT로 바꾸면 항상 올바른 신호 처리가 이루어집니다.kill -15 <PID>SIGTERMkill -9 <PID>SIGKILL
  • kill -10 <PID>터미널 2에서 실행하면 wait내장 기능이 중단되지만 test신호가 SIGUSR1잡힌 직후 printet이 발생하고 루프가 계속되므로 루프를 벗어나지 않습니다.
  • Send는 SIGINT실행 루프를 중단하고 셸을 정지시키거나 결코 중단되지 않고 wait대기/정지 상태를 유지합니다.

결론적으로

SIGINTSIGUSR1수동 트래핑 이나 기타 사용자 정의 트래핑 후에는 올바르게 처리되지 않거나 무시됩니다 . 이는 프로세스가 여전히 존재한다는 것을 의미하며, 이는 CPU를 소비/가열하거나 셸을 동결시키는 이유입니다. 터미널 2에서 실행하면 프로세스가 종료/종료되며 터미널 1에 대한 제어권을 다시 얻고 CPU를 이완시킬 수 있습니다 kill -15 <PID>.kill -9 <PID>

이 문제가 발생하는 이유는 여전히 미스터리이지만 누군가가 뒤에서 무슨 일이 일어나고 있는지 정확히 설명할 수 있기를 바랍니다.

관련 정보