터미널에서 실행하는 스크립트가 있고 일부 출력이 인쇄됩니다. 예를 들어, 키를 누르지 않고(그리고 스크립트를 수정하지 않고) 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-Z
CONT 신호 에 해당합니다 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
터미널=거짓
유형=응용 프로그램
카테고리=애플리케이션
아이콘 = 임의의 아이콘 링크