터미널의 애플리케이션이 여전히 실행 중이지만 직접 액세스할 수 없습니다.

터미널의 애플리케이션이 여전히 실행 중이지만 직접 액세스할 수 없습니다.

중복 가능성:
백그라운드 프로세스를 일시 중지하고 포그라운드로 가져오는 방법

이전에 한번도 겪어보지 못한 이상한 문제가 있습니다. 이것이 내가 한 일입니다:

나는 앱을 시작했다 ./myApp.

&백그라운드에서 실행되도록 하는 명령줄 인수는 없습니다 .

불행히도 내 시스템이 어느 시점에서 정지되었습니다. GUI를 통한 접근이 없기 때문에 먼저 CPU를 많이 사용하는 작업을 모두 중단하기로 결정했습니다. 그래서 하나 tty(Shortcut Ctrl++ on Ubuntu ) 를 생각해내고 Alt권한을 얻은 후 실행했습니다.F2kill -STOP pidpidmyApptop

다행히도 약간의 시간이 지나면 시스템이 해동되었습니다. 그래서 프로세스를 다시 시작했습니다 kill -CONT pid.

하지만 터미널에서 본 내용은 다음과 같습니다.

[2]+ Stopped  ./myApp

이제 터미널은 애플리케이션이 실행되고 있지 않은 상태에 있지만(예: 내가 할 수 있거나 ls원하는 모든 작업) 프로세스 관리자는 여전히 애플리케이션이 실행 중이라고 보고합니다. 이 작업을 수행하면 34시간의 컴퓨팅 시간이 낭비될 것이기 때문에 기쁩니다(예, 정말 나쁜 응용 프로그램입니다. 저는 확실히 작성하지 않았습니다). 보관할 출력이 전혀 없기 때문입니다.

응용 프로그램의 무거운 작업이 완료되면(몇 시간 내에 예상됨) 응용 프로그램 내부에 특정 작업을 입력하여 파일에 쓸 수 있도록 해야 합니다(입력을 위한 사용자 정의 셸 프롬프트와 비슷하므로 이것이 바로 그런 것 같습니다). cin)을 사용하고 있습니다.

따라서 질문은 다음과 같습니다. 출력을 확인하고 상호 작용할 수 있도록 애플리케이션으로 돌아가려면 어떻게 해야 합니까? 가능하지 않은 경우: 애플리케이션을 다시 시작하지 않고도 애플리케이션으로 스트리밍하고 필요한 명령을 실행할 수 있습니까?

고쳐 쓰다응용 프로그램은 여전히 ​​정확히 동일한 터미널로 출력됩니다.

참고로 이것이 필요할 수도 있습니다: 저는 커널 3.2.0-36과 함께 Ubuntu x86을 실행하고 있습니다.

답변1

연결된 psuedo-tty가 없는 프로세스에 콘솔을 다시 연결하는 것이 가능하지 않다고 생각합니다.

나중에 콘솔에 연결을 유지해야 하는 상황에서는 를 사용해 보세요 screen.

Screen은 쉘의 특정 인스턴스와 로컬 터미널 간의 상호 작용을 위해 설계된 도구입니다. 중개인이 되면 실행 중인 프로세스에서 분리했다가 나중에 다시 연결할 수 있습니다. 이는 인터넷 연결이 불안정하거나 시스템 관리에 SSH를 사용하는 경우 또는 장기간 실행되는 프로세스가 있는 경우에 유용합니다.

터미널(GUI 또는 실제 tty 중 하나에서)을 열 때 screen. 우분투에서는 기본적으로 설치되어야 합니다. 화면에는 기본 셸이 실행 중임을 알리고 도움말을 찾는 방법이 표시됩니다. 그런 다음 로그인 셸을 실행하고 그대로 유지됩니다.

가장 기본적인 사용법에서는 , Ctrl-A이어서 을 사용하여 D현재 세션에서 분리할 수 있습니다. 세션에 다시 연결하려면 다음을 사용하세요 screen -r <complete name of session>. 세션 이름을 기억하지 못하는 경우 -ls명령 스위치는 사용 가능한 세션에 대한 세부 정보를 제공합니다.

Screen으로 할 수 있는 일이 너무 많아서 사용할 기회가 많지 않았지만 몇 년 전 Digium 지원팀에서 역방향 SSH 연결과 다중 사용자 화면을 사용하여 에뮬레이트된 POTS 인터페이스 카드 중 하나를 구성하는 데 도움을 주었습니다. 방법. 이를 통해 그들은 비밀번호를 모르더라도 내 Asterisk 서버에 안전하게 액세스할 수 있으며 수행 중인 작업을 감사할 수 있습니다.

관련 정보