쉘을 종료하면 프로세스가 포그라운드에서 실행됩니다.

쉘을 종료하면 프로세스가 포그라운드에서 실행됩니다.

포그라운드에서 실행 중인 프로세스가 있습니다. Bash를 종료할 수 있는지 알고 싶습니다.

  1. (물론) 포그라운드 프로세스를 종료하지 않고 평소대로 종료합니다.
  2. 터미널 프로그램을 종료할 필요가 없습니다. 또는 클라이언트(예: iTerm2 또는 PuTTY)를 통해 원격으로 연결하는 경우 클라이언트를 종료할 필요가 없습니다.

실행 중인 포그라운드 프로세스가 없으면 Ctrl-d 또는 issue 를 통해 쉽게 전송 끝을 보낼 수 있다는 것을 알고 있습니다 exit. 포그라운드 프로세스가 실행되는 동안 이것이 가능한지 궁금합니다.

답변1

포그라운드 프로세스란 서버의 다음 속성을 의미하며, 이러한 속성은 터미널에 바인딩됩니다.

  • 사용자와 상호 작용합니다.
  • 슬레이브 의사 장치에 연결된 셸(예: bash)에서 사용할 수 있도록 마스터 의사 장치에 텍스트 입력을 제공합니다.
  • 기본 의사 장치에서 텍스트 출력을 읽고 이를 사용자에게 표시합니다.

그래서 불가능하다고 생각합니다. 또는 설치 프로세스와 마찬가지로 프로세스를 데몬으로 실행하고 출력을 특정 터미널 및/또는 파일에 제공합니다.

답변2

게다가 screen/ tmux또한 nohup더 간단하지만 특정 상황에 따라 때로는 더 좋습니다. 이봐:nohup과 스크린자세한 내용은.

이렇게 하면 nohup프로세스가 포그라운드에 유지되지만 프로세스와 상호 작용하거나 터미널에서 출력을 볼 수는 없습니다. 백그라운드에서 프로세스를 시작하려면 &(ie) when start the process 를 추가하세요 nohup <your command here> &.

프로세스가 이미 실행 중인 경우 (프로세스 중지)를 누른 다음 Command(중지된 프로세스를 백그라운드로 보내기)를 눌러 nohup터미널에 다시 액세스 할 수 있습니다.Ctrl+Zbg

편집하다(OP의 의견 이후): 이 시나리오를 이해했는지 잘 모르겠지만 다음을 시도해 볼 수도 있습니다.

  1. 터미널 창을 엽니다(일부 쉘이 내부에서 실행됩니다)
  2. 해당 창 내에서 다른 셸(예: bash)을 명시적으로 시작합니다.
  3. nohup두 번째 셸에서 포그라운드 프로세스를 시작합니다( s 등 없음 ).
  4. 다른 터미널 창 열기
  5. "중간" 셸을 식별합니다(테스트 중인 프로세스의 상위가 됩니다).
  6. "중간" 쉘에 종료 신호를 보냅니다.

이렇게 하면 테스트된 프로세스가 "세미 데몬"으로 바뀌고 첫 번째 터미널 창에서 최상위 셸에 액세스할 수 있습니다. 테스트 프로세스는 여전히 터미널에 연결되어 있으므로 창을 닫으면 종료됩니다.

관련 정보