명령이 완료된 후 이 화면 세션이 종료되는 이유는 무엇입니까? [복사]

명령이 완료된 후 이 화면 세션이 종료되는 이유는 무엇입니까? [복사]

나는 screen -dmS mysession command화면을 시작하고, 명령을 실행하고, 분리하는 방법을 알고 있습니다. 이는 표준 출력을 파일로 리디렉션해야 할 때 작동합니다.화면에서 프로그램을 실행하고 모든 출력을 파일로 리디렉션하고 분리하는 방법)

screen -dmS mysession bash -c 'ls > test.txt'      # simple example

그러나 결국 스크린 세션은 계속 유지되지 않고 그렇게 할 수 없으며 screen -r mysession더 이상 존재하지 않습니다 screen -ls.

질문: 한 문장으로 어떻게screen 세션 시작, 명령 시작, 분리, 표준 출력을 파일로 리디렉션(예: > test.txt)하지만 자동으로 screen 세션을 종료하지는 않습니다.기다림은 끝났나요?

링크 질문:program.sh가 완료된 후 "screen -dmS sessionName program.sh"가 사라지는 것을 방지하는 방법은 무엇입니까?

답변1

"bash -c"를 사용하면 비대화형 쉘이 생성됩니다. 다음과 같은 프로세스 트리를 생성합니다.

screen───bash───ls

완료되면 lsbash이상의 처리나 입력이 없으며 완료됩니다.

그게 screen다야.

원하는 작업을 수행하려면 먼저 대화형 셸을 시작해야 합니다.

screen -dmS session bash

그런 다음 screen 명령을 사용하여 screen 세션에 명령을 입력합니다 stuff.

screen -S session -p 0 -X stuff "ls > test.txt^M"

^M개행 문자처럼 동작합니다 .

exit^M그런 다음 또는 유사한 명령을 사용하여 셸을 종료 해야 합니다 .

나중에 모든 것을 한 줄의 IE로 결합할 수 있습니다.

screen -dmS session bash && screen -S session -p 0 -X stuff "ls > test.txt^M"

솔직히 말해서, 당신이 하려는 일에 대해서는 screen그것을 완전히 피하고 당신이 하려는 어떤 과정도 거부하는 것이 낫다고 생각합니다.

ls > test.txt & disown %1

이것은 추가 장비 없이도 동일한 작업을 수행합니다.

관련 정보