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
그런 다음 어떤 시스템 호출로 인해 다시 중단되었는지 확인하세요.