bash 내장이 CPU를 100% 소모합니다.

bash 내장이 CPU를 100% 소모합니다.

적어도 다음 날짜에 발생합니다.GNU 배쉬 버전 4.3.42 x86_64&&GNU 배쉬 버전 4.3.11 x86_64

나는 신호로 인터럽트를 받기 위해 sleep & wait $!간단한 대신에 사용합니다.sleepsleepSIGUSR1). 하지만 wait다음을 실행하면 bash 내장 기능이 이상하게 동작하는 것 같습니다 .

터미널 1:

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

터미널 2:

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
)&

터미널 2:

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
)

터미널 2:

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올바르게 처리됩니다.
  • 그것을 하고 있다~ 후에터미널 2에서 실행 kill -10 <PID>(신호 보내기 SIGUSR1)이 올바르게 처리되지 않아 SIGINT문제가 있는 동작이 발생합니다.
  • kill -2 <PID>터미널 2 ( SIGINT) 를 kill -15 <PID>( SIGTERM) 또는 kill -9 <PID>( )로 바꾸면 SIGKILL항상 올바른 신호 처리가 이루어집니다.
  • kill -10 <PID>터미널 2에서 실행하면 내장이 중단되지만 신호가 트랩된 후 즉시 인쇄되고 루프가 계속되므로 wait루프를 떠나지 않습니다 .testSIGUSR1
  • 전송은 SIGINT실행 루프에서 벗어나 쉘을 정지시키거나 중단되지 않고 wait대기/동결 상태를 유지합니다.

결론

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

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

관련 정보