Ctrl-C가 항상 셸 스크립트를 종료하지는 않습니다.

필립

두 가지 시나리오가 있습니다.

#!/usr/bin/env bash
  
sleep infinity
# When I type Ctrl-C here, "sleep" command and script are stopped so I didn't see "End"

echo End
#!/usr/bin/env bash
  
docker exec container-id sleep infinity
# When I type Ctrl-C here, "docker exec" command is stopped but script continued so I saw "End"

echo End

행동의 차이는 무엇입니까?

오구 즈 이스마일

이것이 bash포 그라운드 프로세스가 SIGINT를 무시 하거나 처리하고 정상적으로 종료 될 때 작동 하는 방식 입니다. 아래에서 볼 수 있듯이 사용하지 않고도 재현 할 수 있습니다 docker.

$ bash -c 'sh -c "trap true INT; sleep 10"; echo reached'
^Creached

echoSIGINT가 여기에 도달 한 이유는 SIGINT가 잡아서 처리하기 때문입니다 sh(그렇지 않으면 트랩 세트를 실행할 수 없습니다) bash. 도착했을 때 포 그라운드에서 실행 중이던 프로그램을 중단하지 않았기 때문에에서 무시됩니다 .

이 동작에 대한 이론적 근거는 주어진 여기에 다음과 같이 :

기본 아이디어는 사용자가 키보드 생성 SIGINT를 포 그라운드 프로세스로 이동하려는 것입니다. 그 프로세스는 어떻게 처리할지 결정하게됩니다. bash는 그에 따라 반응합니다. 프로세스가 SIGINT로 인해 종료되면 bash는 SIGINT를받은 것처럼 작동합니다. 그렇지 않은 경우 bash는 프로세스가 처리했다고 가정하고 효과적으로 무시합니다.

정상적인 작업의 일부로 자체 목적으로 SIGINT를 사용하는 프로세스 (emacs가 일반적인 예입니다)를 고려하십시오. 스크립트에서 해당 프로그램을 실행하면 결과적으로 쉘이 스크립트를 예기치 않게 중단하는 것을 원하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

상위 스크립트를 종료하지 않고 Ctrl-C를 사용하여 프로그램 종료

분류에서Dev

ctrl + c를 눌러도 스크립트가 종료되지 않습니다.

분류에서Dev

Ctrl-C는 내 스크립트를 종료하지만 KeyboardInterrupt 예외에 의해 잡히지 않습니다.

분류에서Dev

Bash 스크립트는 Ctrl + C로 종료되지 않습니다.

분류에서Dev

Linux 셸 :`expect` 스크립트가 예상대로 작동하지 않습니다.

분류에서Dev

ctrl d에서 Bash 스크립트가 종료되지 않습니다.

분류에서Dev

FTP 셸 스크립트가 작동하지 않습니다.

분류에서Dev

Crontab의 셸 스크립트가 작동하지 않습니다.

분류에서Dev

Cassandra Bulk Loader는 null 포인터 예외로 종료되지 않으므로 호출하는 셸 스크립트에 오류가 표시되지 않습니다.

분류에서Dev

셸 스크립트 : ssh를 원격 시스템에 연결 한 다음 종료 : 'exit'가 작동하지 않음

분류에서Dev

Ctrl-c를 트랩하여 함수 종료 bash 스크립트를 종료 할 수 없습니다.

분류에서Dev

전경 스크립트 종료 Powershell : 스크립트가 중단되고 Ctrl + C가 작동하지 않음

분류에서Dev

Python 스크립트는 Ctrl + C 또는 Ctrl + Break를 통해 종료 할 수 없습니다.

분류에서Dev

터미널을 닫지 않고 터미널에서 실행중인 스크립트를 종료하는 방법 (Ctrl + C가 작동하지 않음)?

분류에서Dev

Ctrl C는 Python에서 루프 된 하위 프로세스를 종료하지 않습니다.

분류에서Dev

스크립트 A는 CTRL C 종료 될 때마다 스크립트 B를 실행

분류에서Dev

CTRL + C는 "at"유틸리티 프롬프트를 종료하는 데 도움이되지 않습니다. 안전하게 종료하는 방법?

분류에서Dev

셸 스크립트에서 Ctrl + C를 눌렀을 때 프로세스를 취소하는 방법은 무엇입니까?

분류에서Dev

Ctrl + C 명령이 무한 (while) 루프를 종료하지 않습니다.

분류에서Dev

하위 스크립트가 종료 되더라도 상위 bash 스크립트가 종료되지 않는지 확인하십시오.

분류에서Dev

Windows 10 Linux Bash 셸 Ctrl + Space가 Emacs에서 표시를 설정하지 않습니다.

분류에서Dev

하위 스크립트 중 하나가 실패하면 bash 스크립트를 종료하지 않습니다.

분류에서Dev

WSO2 Application Server가 jenkins post steps 셸 스크립트를 통해 시작되지 않습니다.

분류에서Dev

자바 스크립트가 do while 루프를 종료하지 않습니다.

분류에서Dev

bash에서 셸을 종료하지 않고 스크립트를 종료하거나 하위 셸 내에서 변수를 내보내거나 설정합니다.

분류에서Dev

Ctrl + C에서 현재 명령을 종료하고 스크립트를 계속 실행합니다.

분류에서Dev

Ctrl + C에서 현재 명령을 종료하고 스크립트를 계속 실행합니다.

분류에서Dev

컴퓨터가 종료되어 스크립트가 실패하거나 스크립트가 정상적으로 작동한다고 생각하지만 작동하지 않는 경우 실패 경고를 트리거하는 방법은 무엇입니까?

분류에서Dev

C ++ ExceptionHandeler : 종료는 항상 호출되지 않습니다.

Related 관련 기사

  1. 1

    상위 스크립트를 종료하지 않고 Ctrl-C를 사용하여 프로그램 종료

  2. 2

    ctrl + c를 눌러도 스크립트가 종료되지 않습니다.

  3. 3

    Ctrl-C는 내 스크립트를 종료하지만 KeyboardInterrupt 예외에 의해 잡히지 않습니다.

  4. 4

    Bash 스크립트는 Ctrl + C로 종료되지 않습니다.

  5. 5

    Linux 셸 :`expect` 스크립트가 예상대로 작동하지 않습니다.

  6. 6

    ctrl d에서 Bash 스크립트가 종료되지 않습니다.

  7. 7

    FTP 셸 스크립트가 작동하지 않습니다.

  8. 8

    Crontab의 셸 스크립트가 작동하지 않습니다.

  9. 9

    Cassandra Bulk Loader는 null 포인터 예외로 종료되지 않으므로 호출하는 셸 스크립트에 오류가 표시되지 않습니다.

  10. 10

    셸 스크립트 : ssh를 원격 시스템에 연결 한 다음 종료 : 'exit'가 작동하지 않음

  11. 11

    Ctrl-c를 트랩하여 함수 종료 bash 스크립트를 종료 할 수 없습니다.

  12. 12

    전경 스크립트 종료 Powershell : 스크립트가 중단되고 Ctrl + C가 작동하지 않음

  13. 13

    Python 스크립트는 Ctrl + C 또는 Ctrl + Break를 통해 종료 할 수 없습니다.

  14. 14

    터미널을 닫지 않고 터미널에서 실행중인 스크립트를 종료하는 방법 (Ctrl + C가 작동하지 않음)?

  15. 15

    Ctrl C는 Python에서 루프 된 하위 프로세스를 종료하지 않습니다.

  16. 16

    스크립트 A는 CTRL C 종료 될 때마다 스크립트 B를 실행

  17. 17

    CTRL + C는 "at"유틸리티 프롬프트를 종료하는 데 도움이되지 않습니다. 안전하게 종료하는 방법?

  18. 18

    셸 스크립트에서 Ctrl + C를 눌렀을 때 프로세스를 취소하는 방법은 무엇입니까?

  19. 19

    Ctrl + C 명령이 무한 (while) 루프를 종료하지 않습니다.

  20. 20

    하위 스크립트가 종료 되더라도 상위 bash 스크립트가 종료되지 않는지 확인하십시오.

  21. 21

    Windows 10 Linux Bash 셸 Ctrl + Space가 Emacs에서 표시를 설정하지 않습니다.

  22. 22

    하위 스크립트 중 하나가 실패하면 bash 스크립트를 종료하지 않습니다.

  23. 23

    WSO2 Application Server가 jenkins post steps 셸 스크립트를 통해 시작되지 않습니다.

  24. 24

    자바 스크립트가 do while 루프를 종료하지 않습니다.

  25. 25

    bash에서 셸을 종료하지 않고 스크립트를 종료하거나 하위 셸 내에서 변수를 내보내거나 설정합니다.

  26. 26

    Ctrl + C에서 현재 명령을 종료하고 스크립트를 계속 실행합니다.

  27. 27

    Ctrl + C에서 현재 명령을 종료하고 스크립트를 계속 실행합니다.

  28. 28

    컴퓨터가 종료되어 스크립트가 실패하거나 스크립트가 정상적으로 작동한다고 생각하지만 작동하지 않는 경우 실패 경고를 트리거하는 방법은 무엇입니까?

  29. 29

    C ++ ExceptionHandeler : 종료는 항상 호출되지 않습니다.

뜨겁다태그

보관