포그라운드에서 실행 중인 프로세스를 사용하여 셸 종료

포그라운드에서 실행 중인 프로세스를 사용하여 셸 종료

전경을 실행하는 프로세스가 있습니다. Bash를 종료할 수 있는지 궁금합니다.

  1. (물론) 전경 프로세스를 종료하고 평소처럼 종료하지 않고,
  2. 터미널 프로그램을 종료하지 않고, 또는 연결이 클라이언트(예: iTerm2 또는 PuTTY)를 통해 원격인 경우 해당 클라이언트를 종료하지 않고.

실행 중인 포그라운드 프로세스가 없으면 Ctrl-d를 누르거나 를 실행하여 전송 종료를 쉽게 보낼 수 있습니다 exit. 포그라운드 프로세스가 실행 중인 상태에서 이것이 가능한지 알고 싶습니다.

답변1

포그라운드 프로세스는 아래 속성의 서버를 의미하며 터미널과 연결되어 있습니다.

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

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

답변2

screen/ 외에도 .tmuxnohup더 간단하지만 정확한 상황에 따라 더 나은 경우도 있습니다. 여기를 보아라:nohup vs. 스크린상세 사항은.

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

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

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

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

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

관련 정보