ncurses
ARM 보드에서 GUI 애플리케이션을 실행 하려고 합니다 . ttyAMA0
직렬 콘솔 포트를 사용하여 실행하고 있습니다 . 그러나 ncurses 프로그램을 실행하면 백그라운드에서 실행 중인 다른 프로세스가 STDOUT
디버그 메시지(예: qDebug, qWarning)를 GUI 레이아웃에 인쇄하여 소음을 발생시킵니다. 문제는 모든 프로세스가 동일한 콘솔 장치를 사용하기 때문이라고 생각합니다.
STDOUT
그렇다면 GUI에서 다른 프로세스를 볼 수 없도록 이 문제에 대한 명령줄이나 프로그래밍 솔루션이 있습니까 ncurses
?
나는 GNU를 사용해 보았지만 screen
별로 도움이 되지 않았습니다. 화면 세션 내에서도 화면을 오염시키는 이러한 프로세스의 출력이 표시됩니다.
추신: 나는 이미 시도했습니다데이터 베이스솔루션이 작동하고 잘 작동합니다. 하지만 대체 솔루션을 원합니다
답변1
나는 당신이 원하는 것이 가능하다고 생각하지 않습니다. 다음 제목의 수퍼유저 스레드를 참조하십시오.터미널에서 프로세스를 완전히 분리하는 방법은 무엇입니까?.
기본적으로 3가지 옵션이 있다고 생각합니다.
옵션 1
다음과 같이 실행되도록 오염된 터미널 스크립트를 실행합니다.
nohup somescript &> /dev/null &
해당 STDOUT 및 STDIN은 /dev/null에서 실행되어야 하며, 백그라운드에 두고 터미널을 닫아야 하는 경우 터미널 신호에서 연결을 끊어야 합니다.
옵션 #2
그런 것을 사용하십시오 screen
. 댓글에 @StephaneChazelas 덕분에screen
귀하의 아키텍처에 대한 데비안용 패키지.
옵션 #3
터미널의 STDOUT을 오염시키는 프로세스를 일시적으로 중단하는 것에 관심이 없다면 다음 설정을 사용할 수 있습니다 stty tostop
. 이렇게 하면 이러한 프로세스가 STDOUT을 터미널로 보내는 것을 방지할 수 있습니다. 완료되면 명령을 사용하여 다시 활성화할 수 있습니다 stty -nostop
. 나는 여기 있다Unix Power Tools 3판 책.
예
다음은 내 터미널의 STDOUT을 오염시키는 샘플 애플리케이션입니다.
$ while [ 1 ];do echo hi 2>&1;sleep 5;done &
다음과 같이 5초마다 "안녕"을 울립니다.
[1] 30913
hi
$ hi
hi
hi
hi
이제 내가 실행할 때 stty tostop
:
$ stty tostop
$ date
Thu May 9 14:22:44 EDT 2013
$ date
Thu May 9 14:23:52 EDT 2013
이 접근 방식의 문제점은 다른 프로세스가 중지된다는 것입니다.
$ jobs
[1]+ Stopped while [ 1 ]; do
echo hi 2>&1; sleep 5;
done
이 접근 방식의 문제점은 stty -tostop
프로세스를 복원하지 않고 stty
STDOUT이 다시 허용된다고 명시한 설정만 설정한다는 것입니다. 따라서 프로세스를 수동으로 복원해야 합니다.
$ stty -tostop
$ jobs
[1]+ Stopped while [ 1 ]; do
echo hi 2>&1; sleep 5;
done
$ fg
while [ 1 ]; do
echo hi 2>&1; sleep 5;
done
hi
^Z
[1]+ Stopped while [ 1 ]; do
echo hi 2>&1; sleep 5;
done
$ bg
[1]+ while [ 1 ]; do
echo hi 2>&1; sleep 5;
done &
$ hi
hi
hi
hi
hi
위는 내가 실행 중인 프로세스를 보여줍니다 . 그런 다음 STDOUT을 포그라운드로 오염시키는 stty -tostop
명령을 실행 하고 +를 실행하고 프로세스 를 중지 한 다음 백그라운드 명령을 사용합니다 .fg
while ...
CtrlZwhile ...
bg
추가 아이디어
U&L Q&A에서 추천 도구를 확인해 보세요.
시도해 볼 수 있는 도구와 가능한 경로가 많이 있습니다 screen
. tmux
STDOUT을 오염시키는 프로세스를 사용하거나 다른 터미널에 다시 연결할 수도 있습니다.reptyr
.