터미널 프로그램에서 실행 중인 콘텐츠를 백그라운드로 보내기

터미널 프로그램에서 실행 중인 콘텐츠를 백그라운드로 보내기

터미널에서 실행하는 스크립트가 있고 일부 출력이 인쇄됩니다. 예를 들어, 키를 누르지 않고(그리고 스크립트를 수정하지 않고) 5초 후에 백그라운드로 보내고 싶습니다. Bash 스크립트처럼 스크립트를 시작하고 잠시 잠자기한 후 실행 중인 애플리케이션을 백그라운드로 보냅니다. 일단 백그라운드로 들어가면 출력에 신경 쓰지 않습니다.

UPD: 작동하지 않는 것:

  • nohup
  • after 스크립트 사용법 &- 출력이 여전히 터미널로 전송되는 동안 즉시 백그라운드로 전송됩니다(이는 제가 피하고 싶은 것입니다)

답변1

다른 프로세스의 출력을 다른 곳으로 리디렉션할 수 있는 비해킹 방법은 없습니다[1].ㅏ)프로세스를 다시 포그라운드로 가져오려는 의도는 없으며비)cat프로그램이 실행되는 동안 다른 프로세스(경량)도 실행되는 것이 허용됩니다. 그러면 다음과 같은 작업이 수행될 수 있습니다.

{ your_program ... & } | (trap : INT; cat & sleep 5; kill $!; cat >/dev/null &)

프로그램의 stderr 및 stdout을 your_program 2>&1.

[1] 가능한 해킹 접근 방식은 디버거를 연결하고 그 내부에서 출력을 리디렉션하는 것입니다.

답변2

이제 나는 큰 오해를 봅니다. 작업이 전경에서 시작되어 5초 후에 마법처럼 배경으로 전환되어야 한다고 생각했습니다.출력은 중요하지 않습니다. 하지만 이 답변을 사용하면 출력이 계속됩니다... Q는 "배경" 및 "출력 없음"과 같은 것 같습니다. 어쨌든 이것은 흥미롭다:

이 도우미 스크립트를 사용하여 "슬링"하십시오...

#!/bin/bash
sleep 1
pid=$(pidof -x counter.sh)
sleep 3
kill -s STOP $pid
sleep 1
kill -s CONT $pid

..."counter.sh"라는 스크립트를 일시 중지하고 백그라운드에서 다시 시작하도록 할 수 있습니다. 통화 내용은 다음과 같습니다.

./suspender & ./counter.sh

"Suspender"는 백그라운드에서 시작되어 카운터가 실행될 때까지 1초 동안 기다립니다. pid를 가져오고 3초 동안 기다립니다(필요에 따라 지연). STOP 신호는 ctrl-ZCONT 신호 에 해당합니다 bg. 중간중간 수면이 필요합니다.

Counter는 Ctrl-C를 자주 누르고 몇 초 동안 시청하고 싶은 프로그램입니다. 5초 후에 프롬프트가 해제됩니다. 출력은 중요하지 않습니다. 이것은 단지 10개의 숫자를 인쇄하며 점점 느려집니다.

#!/bin/bash 
for i in {1..10}
do 
  sleep $i; echo $i
done

작업 제어 메시지와 출력이 계속되면서 기분이 좋지 않습니다.

일시 중지-재개-in-bg 작업 전에 ctrl-c를 사용하여 스크립트를 중지할 수 있으며 그 후에 프롬프트를 사용할 수 있습니다. 거의 의미가 있습니다 ...

답변3

.desktop 구성 파일을 생성하고 이를 bash 파일과 연결할 수 있습니다. 이렇게 하면 쉘 파일을 실행할 수 있으며 터미널에서 열리지 않습니다. 터미널에서 열리지 않도록 Terminal=True변경 하세요 . Terminal=False"anyfile.dekstop"이라는 파일에 다음을 입력하고 실행 가능하게 만듭니다(마우스 오른쪽 버튼 클릭 - 속성 - 파일을 프로그램으로 실행 허용).

[데스크탑 입구]

버전=1.0

Exec="실행 파일 또는 .sh 파일의 경로"

이름=샘플

일반 이름 = 예

댓글=모든 댓글

인코딩=UTF-8

터미널=거짓

유형=응용 프로그램

카테고리=애플리케이션

아이콘 = 임의의 아이콘 링크

관련 정보