프로세스가 자동으로 중단되는 이유는 무엇입니까?

프로세스가 자동으로 중단되는 이유는 무엇입니까?
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007
brandon@Air portal % fg
[1]  + 81104 continued  rails server --port=3007
[1]  + 81104 suspended (signal)  rails server --port=3007

클릭하지 않았습니다 ^Z. 다시 전경으로 가져오면 프로세스가 일시 중지되었습니다. 아이디어가 부족해요. 이에 대한 가능한 이유는 무엇입니까?

답변1

SIGTSTP무언가가 신호를 보내면 프로세스가 일시 중단될 수 있습니다. 이것이 Ctrl-Z가 수행하는 작업이지만 신호는 동일한 효과를 갖습니다.

일부 대화형 응용 프로그램은 raise(SIGTSTP)스스로를 일시 중단되었다고 부릅니다. 이는 터미널을 원시 모드(예: 편집 활성화)로 전환하는 프로그램을 통해 수행됩니다. 예를 들어 Vim과 같은 텍스트 편집기에서 Ctrl-Z를 누르면 TTY 드라이버는 신호를 보내기 위해 Ctrl-Z를 가로채지 않습니다 SIGTSTP. TTY가 원시 모드이기 때문에 이 기능은 비활성화됩니다. 편집기는 Ctrl-Z를 받아 이를 일시 중지 명령으로 해석합니다. 이 명령이 수행하는 작업 중 하나는 SIGTSTP프로세스 자체에 신호를 보내는 것입니다.

그러나 백그라운드 서버 애플리케이션처럼 보이는 것은 이러한 작업을 수행할 수 없을 것 같습니다. 신호는 허가가 있는 모든 프로세스에서 나올 수 있습니다.

프로세스 자체가 자신에게 신호를 보내는 경우 다른 터미널 창에서 strace를 실행하면 이를 확인할 수 있습니다.

strace -p 81104

그런 다음 어떤 시스템 호출로 인해 다시 중단되었는지 확인하세요.

관련 정보