ncurses
ARMボードでGUIアプリケーションを実行しようとしています。ttyAMA0
シリアルコンソールポートを使用して実行しています。ただし、ncursesプログラムを実行すると、バックグラウンドで実行されている他のプロセスがデバッグメッセージSTDOUT
(qDebug、qWarningなど)をGUIレイアウトに印刷してノイズを発生させます。問題は、すべてのプロセスが同じコンソールデバイスを使用しているためだと思います。
STDOUT
それでは、GUIで他のプロセスを見ることができないように、この問題に対するコマンドラインまたはプログラミングソリューションはありますかncurses
?
私はGNUを試しましたが、screen
あまり役に立ちませんでした。画面セッション内でも画面を汚染するこれらのプロセスの出力が表示されます。
PS:私はすでに試しましたデータベースソリューションはうまくいき、うまくいきます。しかし、代替ソリューションが欲しい
ベストアンサー1
私はあなたが望むことが可能だとは思わない。次のタイトルのスーパーユーザースレッドを参照してください。端末からプロセスを完全に分離するには?。
基本的に3つのオプションがあると思います。
オプション1
次のように実行されるように汚染されたターミナルスクリプトを実行します。
nohup somescript &> /dev/null &
そのSTDOUTとSTDINは/ dev / nullで実行する必要があり、バックグラウンドに置いて端末を閉じる必要がある場合は、端末信号から切断する必要があります。
オプション#2
そのようなものを使用してくださいscreen
。コメントに@StephaneChazelasのおかげでscreen
あなたのアーキテクチャのためのDebianパッケージ。
オプション#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
。