ncurses에서 STDOUT 노이즈를 분리하세요

ncurses에서 STDOUT 노이즈를 분리하세요

ncursesARM 보드에서 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프로세스를 복원하지 않고 sttySTDOUT이 다시 허용된다고 명시한 설정만 설정한다는 것입니다. 따라서 프로세스를 수동으로 복원해야 합니다.

$ 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명령을 실행 하고 +를 실행하고 프로세스 를 중지 한 다음 백그라운드 명령을 사용합니다 .fgwhile ...CtrlZwhile ...bg

추가 아이디어

U&L Q&A에서 추천 도구를 확인해 보세요.

시도해 볼 수 있는 도구와 가능한 경로가 많이 있습니다 screen. tmuxSTDOUT을 오염시키는 프로세스를 사용하거나 다른 터미널에 다시 연결할 수도 있습니다.reptyr.

관련 정보